ConfidencePool inherits OpenZeppelin's Ownable2Step but never overrides renounceOwnership(). If the sponsor renounces ownership and then the token issuer blacklists the recoveryAddress (normal behavior for USDC/USDT and similar stablecoins), all fund-sweeping paths (claimCorrupted, sweepUnclaimedCorrupted, sweepUnclaimedBonus) revert permanently. There is no owner left to call setRecoveryAddress() to redirect the sweep, leaving stakers' funds permanently locked in the pool.
Likelihood: Low. It needs two independent events: the sponsor renouncing ownership, and recoveryAddress later being blacklisted. Neither is guaranteed, but both are realistic: sponsors renounce ownership to appear more decentralized, and blacklist-capable stablecoins (USDC/USDT-class) are common stake tokens. Once both are true, the trap is permanent and triggers on every future sweep with no further action needed.
Impact: High. Every future CORRUPTED-path payout and unclaimed-bonus sweep reverts forever, with no on-chain recovery path. This can freeze the entire pool balance — stakers' principal and bonus funds — not just a small amount.
To demonstrate this bug, add MockBlockableERC20.sol in test/mocks/ — a token contract that reverts transfers to blacklisted addresses, modeling the behavior of tokens like USDC/USDT when their issuer blocks an address. Then add testClaimCorruptedLocksForeverAfterRenounceThenRecoveryBlocked() in test/unit/ConfidencePool.t.sol to confirm the bug.
MockBlockableERC20.sol:
Test function: testClaimCorruptedLocksForeverAfterRenounceThenRecoveryBlocked
Run test with: forge test --match-test testClaimCorruptedLocksForeverAfterRenounceThenRecoveryBlocked -vvv
Result: [PASS] — confirming claimCorrupted() reverts forever and the staked funds stay trapped in the pool with no recovery path.
Add the error to src/interfaces/IConfidencePool.sol:
Then add the override to src/ConfidencePool.sol:
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
View preliminary resultsAppeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.