Normal behavior: when the moderator flags a good-faith CORRUPTED outcome, the named attacker receives an exclusive CORRUPTED_CLAIM_WINDOW of 180 days to claim the full pool bounty. After this window, anyone can sweep the unclaimed corrupted funds to recoveryAddress.
Normal behavior: the contract stores several timestamps as uint32, and pool expiry is bounded by type(uint32).max.
Specific issue: flagOutcome() computes corruptedClaimDeadline as uint32(_firstGoodFaithCorruptedAt + CORRUPTED_CLAIM_WINDOW). When the first good-faith corrupted flag occurs within 180 days of type(uint32).max, this addition exceeds the uint32 range and truncates into the past.
Specific issue: once the deadline wraps into the past, claimAttackerBounty() immediately reverts with ClaimWindowExpired, while sweepUnclaimedCorrupted() immediately becomes callable. This contradicts the documented 180-day exclusive bounty window.
Likelihood:
A pool remains valid near the uint32 timestamp ceiling, which the contract otherwise supports by allowing expiry <= type(uint32).max.
The moderator flags a good-faith CORRUPTED outcome within 180 days of type(uint32).max.
The named attacker tries to claim after the wrapped deadline has already been stored in the past.
Impact:
The named good-faith attacker loses the documented 180-day exclusive bounty window.
The pool can be swept to recoveryAddress immediately instead of remaining reserved for the attacker.
The code behavior diverges from docs/DESIGN.md, which states that the pool is reserved for the named whitehat for CORRUPTED_CLAIM_WINDOW.
Or reject good-faith corrupted flags that cannot preserve the full claim window:
Using uint64 or uint256 for corrupted claim timestamps is preferable because it preserves the full documented claim window without adding boundary-case policy logic.
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.