For a good-faith CORRUPTED resolution the pool earmarks the entire pool (all staked principal + all bonus) to the moderator-named whitehat, claimable via claimAttackerBounty within a 180-day window; the moderator may re-flag before the first claim to correct a mistake.
The claim deadline is anchored to the first-ever good-faith CORRUPTED flag and is never re-based, even when the outcome leaves and re-enters good-faith CORRUPTED. A moderator who flags good-faith CORRUPTED, re-flags away during a dispute, and only re-enters good-faith CORRUPTED more than 180 days later produces a deadline already in the past — the rightful whitehat can never claim, and the whole pool is swept to recoveryAddress. This is not a mere delay to a neutral sink: recoveryAddress is sponsor-controlled and mutable at any time, including after the good-faith flag. Composing the two, a moderator operational error (a >180-day dispute round-trip) lets the sponsor point recoveryAddress at its own wallet and capture the whitehat's entire earmarked bounty — value the protocol reserved for the whitehat, redirected to an unintended party.
Likelihood:
Occurs when a good-faith CORRUPTED resolution is disputed and the moderator re-enters good-faith CORRUPTED more than CORRUPTED_CLAIM_WINDOW (180 days) after the first good-faith flag — a realistic long-dispute / correction pattern on a long-lived agreement.
Occurs while the sponsor has pointed (or re-points, post-flag) recoveryAddress at an address it controls — the default position for a self-interested sponsor.
The trigger is a moderator operational error, not malice: a malicious moderator has a simpler path (flag bad-faith CORRUPTED directly), so this is a genuine code flaw, not an assumed-honest-actor issue.
Impact:
The moderator-named whitehat is permanently denied their entire earmarked bounty (the whole pool).
That bounty is captured by the sponsor via a self-controlled recoveryAddress, converting a good-faith outcome (funds → whitehat) into a sponsor windfall — defeating the core good-faith incentive and transferring value to an unintended party.
test/audit/ChainEscalation.t.sol — the full chain plus a control proving both legs are required:
Two independent fixes; either one breaks the chain:
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.