Description
In claimExpired(), the auto-resolution branch that routes a CORRUPTED registry state to the correct fund-sweep path is gated by a compound condition.
riskWindowStart is set lazily — only the first time a gated entrypoint (stake, withdraw, contributeBonus, or pokeRiskWindow) happens to observe the registry while it is in an active-risk state (UNDER_ATTACK / PROMOTION_REQUESTED). Nothing forces this observation to occur. If the registry transitions NEW_DEPLOYMENT → UNDER_ATTACK → CORRUPTED without anyone calling a gated entrypoint in between, riskWindowStart remains 0 even though the pool is genuinely, terminally corrupted.
Likelihood:
Requires only that no gated entrypoint is called during the registry's time in an active-risk state before it reaches CORRUPTED.
This is plausible by default for low-traffic pools and becomes actively incentivized the moment any staker recognizes the EXPIRED-vs-CORRUPTED payout asymmetry. No sophistication is required — only inaction.
Impact:Likelihood: Requires only that no gated entrypoint is called during the registry's time in an active-risk state before it reaches CORRUPTED. This is plausible by default for low-traffic pools and becomes actively incentivized the moment any staker recognizes the EXPIRED-vs-CORRUPTED payout asymmetry. No sophistication is required — only inaction.
Capital intended for recoveryAddress on a confirmed exploit instead pays out to stakers, undermining the core economic guarantee of the pool — that corrupted agreements sweep funds away from the parties who failed to protect them.
Stop using riskWindowStart == 0 as a gate on whether the CORRUPTED branch executes at all. Route on the terminal registry state alone, and use riskWindowStart == 0 only to decide whether the value needs to be back-filled for downstream bonus-window math:
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.