For good-faith CORRUPTED, bountyEntitlement is set at flag time to snapshotTotalStaked + snapshotTotalBonus, the entire pool becomes the named attacker's bounty. DESIGN.md states the intended protection plainly: a donation landing while the bounty is unclaimed is held until the attacker claims it, a bounded, recoverable delay, not a lock. The MustClaimBountyFirst gate on claimCorrupted is what enforces that hold.
The problem is that gate only checks bountyClaimed < bountyEntitlement. If nobody has staked and nobody has called contributeBonus by flag time, both tracked sums are zero, so bountyEntitlement is zero too. The check becomes 0 < 0, which is false, so it never fires. Any raw token balance sitting in the pool, sent by direct transfer instead of through contributeBonus, is not held at all. The named attacker's own claim also fails immediately, bountyClaimed == bountyEntitlement is 0 == 0, true on their very first attempt, before the function even looks at the pool's balance.
Likelihood:
Two things have to line up, not one. A donor has to send a raw transfer instead of calling contributeBonus, a well documented, common mistake pattern across the industry. And the pool has to still have zero tracked stake at the exact moment the attack gets flagged, which mostly narrows this to a pool that's new or hasn't attracted stakers yet.
Once both conditions hold, no further sophistication is needed. Any address can call claimCorrupted immediately, no delay, no relationship to the pool required.
Impact:
The hold that DESIGN.md describes as the intended protection does not engage at all in this case. That's a direct gap between documented behavior and actual behavior, not just an undocumented edge case.
Funds go to recoveryAddress, sponsor controlled, so this isn't permanent destruction. But there's no on-chain mechanism forcing or even facilitating a fix afterward, unlike the clean re-sweep path some of the other findings in this audit have. Recovery here depends entirely on the sponsor noticing and choosing to act.
The named attacker's own claim reverts on the first attempt regardless of any of this, they never get a chance to interact with the balance at all.
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.