The moderator may correct the outcome before any claim (claimsStarted == false). Every path that moves accounted value (claimSurvived / claimExpired / claimCorrupted / sweepUnclaimedCorrupted) sets claimsStarted = true on value movement, closing the re-flag window.
sweepUnclaimedBonus() moves accounted bonus and reduces totalBonus but intentionally does not set claimsStarted. Recovery can sweep the accounted bonus before the moderator re-flags the outcome to good-faith CORRUPTED, making the later snapshot's bountyEntitlement (= snapshotTotalStaked + snapshotTotalBonus) lower than it should be.
Likelihood:
The moderator first flags SURVIVED (or EXPIRED) with riskWindowStart == 0, so bonus is not reserved for stakers
Recovery (or any caller) calls sweepUnclaimedBonus() before the moderator re-flags to good-faith CORRUPTED
The moderator then re-flags to good-faith CORRUPTED naming an attacker, snapshotting the already-swept totalBonus
Impact:
The attacker's bountyEntitlement is permanently understated; the swept bonus portion is unrecoverable by the attacker
The value split between recovery and attacker is disturbed by a permissionless sweep, diverging from the bounty size the moderator intended when correcting the outcome
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.