claimAttackerBounty() is the named whitehat's only mechanism to collect their bounty in a good-faith CORRUPTED outcome. The function computes payout as min(remaining entitlement, freeBalance), so if the pool's token balance is zero, payout is also zero. Rather than reverting, the function silently emits an event and returns with no tokens transferred and no state progressed.
Because bountyClaimed is unchanged and claimsStarted is not set, claimCorrupted() remains permanently blocked by the MustClaimBountyFirst guard. The attacker sees a AttackerBountyClaimed event and may incorrectly believe they received their funds.
Likelihood:
Under normal operation, the pool holds the full staked + bonus balance when claimAttackerBounty() is first called; no other path can drain it while the good-faith flag is set.
The zero-balance path becomes reachable if a fee-on-transfer or rebasing token passes the factory allowlist (governance error), or via a direct ERC20 transfer that reduces balance below the entitlement.
Impact:
The named whitehat attacker submits a transaction, pays gas, receives no tokens, and is given false confirmation via the emitted event, a poor and potentially confusing experience during what is already a high-stakes claim.
claimsStarted stays false and bountyClaimed stays at 0, so claimCorrupted() remains gated by MustClaimBountyFirst indefinitely. The sweep path to recoveryAddress is permanently blocked until bountyClaimed == bountyEntitlement, which can never be reached if the balance stays zero.
This scenario demonstrates how a zero-balance edge case silently corrupts the pool's claim accounting. The named whitehat calls claimAttackerBounty() expecting their bounty, but because the pool balance is zero, the payout resolves to zero. The function does not revert; it emits a AttackerBountyClaimed event with amount = 0 and returns, leaving bountyClaimed unchanged. Because bountyClaimed < bountyEntitlement is still true after this call, claimCorrupted() remains permanently blocked by the MustClaimBountyFirst guard, and no funds can ever leave the pool through either path.
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.