recoveryAddress is the destination for all CORRUPTED-path fund sweeps. Unlike its two sibling sponsor-controlled fields, expiry and scope, which are each frozen by a one-way latch (expiryLocked, scopeLocked), recoveryAddress has no lock at all.
The owner can call setRecoveryAddress at any time, including after flagOutcome(CORRUPTED, ...) has fixed the outcome and before claimCorrupted() sweeps the funds — a window where stakers have zero recourse, since withdraw() is already permanently disabled by riskWindowStart != 0.
Likelihood:
Occurs whenever the owner front-runs their own claimCorrupted() call with setRecoveryAddress, a timing entirely within the owner's control.
Applies to both good-faith and bad-faith CORRUPTED resolutions, since both eventually route through recoveryAddress.
Impact:
Full staker principal and bonus redirected to an owner-controlled address at the exact point stakers can no longer withdraw.
The PoC stakes Alice, resolves the pool bad-faith CORRUPTED, confirms Alice's withdraw() now reverts (proving she's locked in), then has the owner call setRecoveryAddress to a new wallet before anyone calls claimCorrupted(). It asserts the original recovery address received nothing and the attacker-controlled wallet received Alice's full 100 tokens. A second test stakes and withdraws once, then shows setExpiry and setPoolScope both correctly revert once locked, while setRecoveryAddress succeeds unconditionally in the same state — isolating the missing guard as the only asymmetry among the three sponsor-controlled fields.
Add the same one-way guard already used for expiry and scope: once CORRUPTED is flagged, freeze recoveryAddress. This closes the redirection window without restricting the field before an outcome is set, which is when a sponsor may legitimately need to correct it.
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.