56625 sc low broken ownership transfer logic in alchemistcurator permanently freezes contract operations
Description
Brief/Intro
AlchemistCurator has a logic flaw in its ownership transfer — acceptAdminOwnership() is gated by onlyAdmin instead of being callable by pendingAdmin. As a result, once transferAdminOwnerShip(newAdmin) is executed, the new admin can never take control. This creates a permanent governance deadlock, freezing all admin-only operations and potentially locking protocol funds. The issue violates the README rule that “ownership transfer must be secure and correct.
Vulnerability Details
What is broken:
acceptAdminOwnership() is protected by onlyAdmin instead of being callable by the pendingAdmin. That single misplaced restriction breaks the standard 2-step transfer pattern and makes pendingAdmin unable to ever complete an ownership claim.
Why this is wrong:
transferAdminOwnerShip correctly nominates a new admin (sets pendingAdmin).
acceptAdminOwnership must be callable by the nominated address (pendingAdmin) to accept the role. Instead the modifier onlyAdmin allows only the current admin to call acceptAdminOwnership. That defeats the acceptance step.
Impact Details
1. Irrecoverable admin lock: After calling transferAdminOwnerShip(newAdmin), the pendingAdmin cannot execute acceptAdminOwnership(), leaving ownership transfer permanently incomplete.
2. Admin functions disabled: All admin-only functions (e.g., cap adjustments, adapter management, allocations) become inaccessible to the new admin and may be unsafe or unusable for the old one.
3. Funds frozen: Vault and strategy assets requiring admin actions remain locked in the contract, with no on-chain method to recover or move them—resulting in a permanent freeze of funds.
References
Proof of Concept
Proof of Concept
The test command: forge test --match-contract AlchemistCuratorOwnershipTest -vvvv
The output:
Previous56572 sc insight aave v3 lending pool is immutable in aave strategiesNext57995 sc high missing slippage protection in tokeautousdstrategy allocation function leads to permanent value loss
Was this helpful?