Intended behavior: before any claim starts, the moderator can re-flag an outcome to correct a mistaken SURVIVED / attacker / good-faith decision. For good-faith CORRUPTED, the named attacker should receive the full tracked pool: snapshotTotalStaked + snapshotTotalBonus.
Issue: sweepUnclaimedBonus() can move tracked bonus to recoveryAddress without setting claimsStarted. In the no-observed-risk case, this also decrements totalBonus. A later correction to good-faith CORRUPTED is still allowed, but the attacker’s bountyEntitlement is recomputed from the reduced totalBonus, so the attacker loses the swept bonus.
Likelihood:
Reason 1: This occurs during the documented pre-claim correction window when the moderator first flags SURVIVED for a terminal CORRUPTED registry and later corrects to good-faith CORRUPTED.
Reason 2: The sweep is permissionless, and in the riskWindowStart == 0 path it can be executed immediately before any staker claim finalizes the outcome.
Impact:
Impact 1: The named good-faith attacker receives less than the intended full-pool bounty.
Impact 2: Up to the entire tracked bonus pool is redirected to recoveryAddress; in a bonus-only pool, the attacker can lose the whole intended bounty.
Below is the textual PoC:
Prevent tracked bonus from being swept while the re-flag window is still open. Pure donations can still be swept, but accounted totalBonus should remain until a real finality event occurs.
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.