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.
View preliminary resultsAppeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.