The flagOutcome() function in ConfidencePool.sol is callable only by the moderator (via the onlyModerator modifier).
The moderator can set the outcome to CORRUPTED and provide any address as the attacker_ parameter.
Once the outcome is CORRUPTED, the specified attacker can immediately call claimAttackerBounty() to withdraw the entire pool balance (principal + bonus).
There is no validation that the attacker address matches the actual on-chain attacker from the registry.
There is no timelock, delay, or appeal mechanism – the claim can be executed instantly after flagOutcome().
Impact
A malicious or compromised moderator can:
Arbitrarily mark any pool as CORRUPTED.
Set themselves (or any colluding address) as the attacker.
Immediately claim the entire pool balance (all stakers' deposits + any bonus).
Result: Stakers lose 100% of their funds; the protocol’s trust model is completely broken.
Describe the normal behavior in one or more sentences
Explain the specific issue or problem in one or more sentences
Do not allow the moderator to set the attacker address arbitrarily – either derive it from the registry or restrict flagOutcome() to a trusted multi‑signature / DAO.
Introduce a timelock or challenge period (e.g., 7 days) between flagOutcome() and claimAttackerBounty() to allow stakers to appeal.
Require goodFaith = true only if the attacker address is verified by the registry; otherwise force goodFaith = false, which sweeps funds to recoveryAddress and prevents theft.
Impact:
A malicious or compromised moderator can:
Arbitrarily mark any pool as CORRUPTED.
Set themselves (or any colluding address) as the attacker.
Immediately claim the entire pool balance (all stakers' deposits + any bonus).
Result: Stakers lose 100% of their funds; the protocol’s trust model is completely broken.
Proof of Concept (Foundry Test)
The following Foundry test (based on the existing BaseConfidencePoolTest helpers) reproduces the attack and passes, confirming the vulnerability
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.