The claimExpired function serves as a mechanical backstop for stakers to retrieve their funds after the pool's expiry. It contains logic to resolve the pool's outcome if it is still UNRESOLVED. If the underlying agreement is in a CORRUPTED state, the function is designed to revert until a MODERATOR_CORRUPTED_GRACE period (180 days) has passed.
However, the call to _observePoolState(), which can set the riskWindowStart timestamp, occurs before this grace period check. A malicious actor can call claimExpired immediately after expiry when the agreement is CORRUPTED. This call will revert on the grace period check, but not before _observePoolState() has set riskWindowStart. Once riskWindowStart is set, the condition state == IAttackRegistry.ContractState.CORRUPTED && riskWindowStart != 0 will always be true in subsequent calls, causing them to revert with AgreementCorruptedAwaitingModerator until the 180-day grace period ends. This allows a single, permissionless call to lock all stakers' funds in the pool for 180 days, even if their funds should have been claimable.
Likelihood: High
Reason 1
This occurs when any user calls claimExpired in the specific window after expiry but before the MODERATOR_CORRUPTED_GRACE period has elapsed, while the agreement is CORRUPTED.
Reason 2
This is a likely scenario as users will rush to claim funds post-expiry, and a CORRUPTED agreement state is a key part of the protocol's lifecycle.
Impact: High
Impact 1
All stakers are prevented from claiming their funds via claimExpired for up to 180 days.
Impact 2
This constitutes a major denial of service against a core function, temporarily freezing all staked capital and undermining the purpose of the expiry backstop.
Move the call to _observePoolState() and the state snapshotting logic to occur after the AgreementCorruptedAwaitingModerator check. This ensures that a reverting call cannot change the state in a way that blocks future legitimate calls.
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.