recoveryAddress is the destination of CORRUPTED settlement: under bad-faith CORRUPTED the entire pool (staker principal + bonus) is transferred to it. To protect staker reliance, expiry is latched once via expiryLocked on the first stake and cannot change afterwards.
Unlike expiry, setRecoveryAddress() has no latch, timelock, or post-settlement gate. The owner (sponsor) can change recoveryAddress to any address at any time after stakers deposit — including after the outcome is flagged CORRUPTED and before the sweep executes — redirecting the entire pool to an arbitrary address. The recovery address stakers trusted at deposit time is no longer guaranteed.
Likelihood:
The owner key is compromised, or the sponsor changes their mind / turns malicious after receiving staker funds, and calls setRecoveryAddress before the CORRUPTED sweep
The pool enters bad-faith CORRUPTED, and claimCorrupted / sweepUnclaimedCorrupted transfer the whole pool to the current recoveryAddress
Impact:
Staker principal (under bad-faith CORRUPTED) and bonus are redirected to an address the owner picks after the fact, breaking the trust premise stakers had at deposit time
Inconsistent with the one-time expiry latch: both are parameters that determine staker fund outcomes, yet one is latched and the other is freely mutable
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.