ConfidencePoolFactory inherits PausableUpgradeable, and the sole factory owner can call pause() at any time, blocking all calls to createPool() via the whenNotPaused modifier. No time-lock, multisig, or DAO vote is required.
Note: the // aderyn-ignore-next-line(centralization-risk) annotation on every admin function confirms the development team has already audited and accepted this centralization vector. Pausing the factory does not affect existing pool clones — stakers can always withdraw, existing pool logic is unaffected. The impact is limited to preventing new pool creation.
Likelihood:
A compromised owner key or malicious upgrade to the factory's access control could trigger pause() without community consent.
Because there is no time-lock, the pause takes effect in the same block as the owner's transaction with no warning window for sponsors.
Impact:
New pool creation is blocked for all sponsors for as long as the factory remains paused.
Existing pool stakers, bonus contributors, and outcome moderators are entirely unaffected — no funds are at risk in deployed pools.
Severity is bounded to degraded availability for new entrants only; no financial loss to existing participants.
Steps to Reproduce:
Create test/PauseTest.t.sol with the code below.
Run: forge test --match-test test_AdminPauseBlocksCreatePool -vvv
The test passes, confirming the owner can unilaterally block all new pool creation.
Important: This codebase uses OpenZeppelin v5. The pause revert is a custom error
EnforcedPause(), not the OZ v4 string"Pausable: paused". Usingvm.expectRevert("Pausable: paused")will fail silently.
Route pause() and unpause() through a time-locked multisig rather than a single EOA owner. This gives the community a response window before a pause takes effect:
For reference, a 48-hour TimelockController between the DAO multisig and the factory owner would allow the community to observe and contest malicious pause calls before they take effect. Alternatively, remove the pause capability entirely from the factory if emergency halting is not a core protocol requirement — the aderyn-ignore-next-line(centralization-risk) annotations already indicate the team has weighed this trade-off.
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.