ConfidencePool locks one staker-reliance parameter (expiry) but leaves the higher-impact recoveryAddress fully unlocked. Because the CORRUPTED payout paths read recoveryAddress live at sweep time and setRecoveryAddress has no outcome or finality gate, a pool sponsor can change the sweep destination after CORRUPTED is decided — even after the claimsStarted finality latch — and capture the entire pool, including an unclaimed good-faith whitehat bounty.
Contrast the locked sibling setter:
DESIGN.md §10 justifies locking expiry to "protect staker reliance … once anyone has deposited against a given deadline, the sponsor cannot move it," yet never locks recoveryAddress — the parameter that controls the destination of the whole pool. setRecoveryAddress also ignores claimsStarted: finality freezes which outcome applies, not where the money goes.
A secondary instance of the same defect: expiryLocked is set only in stake(), not contributeBonus(), so a bonus contributor who has already committed funds can still have expiry moved under them — showing the inconsistency is systemic.
Likelihood: Low — requires the sponsor (a privileged actor) to act maliciously or be compromised.
Impact: High — total loss of the pool to an unintended recipient; in the good-faith case, funds owed to a third-party whitehat are intercepted.
Both CORRUPTED exits read the destination live:
claimCorrupted: safeTransfer(recoveryAddress, balanceOf(this)) — whole pool for bad-faith.
sweepUnclaimedCorrupted: safeTransfer(recoveryAddress, balanceOf(this)) after the attacker's 180-day window closes.
All cases pass under forge test:
Supporting (Part B):
Lock recoveryAddress on the same boundary as expiry (reuse the existing latch, no new storage):
At minimum, reject setRecoveryAddress once outcome != UNRESOLVED. Additionally, set expiryLocked in contributeBonus() as well as stake(), so any committed capital freezes the deadline per the §10 rationale.
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.