58259 sc low broken operator logic inside alchemistcurator
Submitted on Oct 31st 2025 at 19:33:02 UTC by @Cyborg for Audit Comp | Alchemix V3
Report ID: #58259
Report Type: Smart Contract
Report severity: Low
Target: https://github.com/alchemix-finance/v3-poc/blob/immunefi_audit/src/AlchemistCurator.sol
Impacts:
Contract fails to deliver promised returns, but doesn't lose value
Broken AlchemistCurator's operator Vault managing
Description
Brief/Intro
Missing logic inside AlchemistCurator leading to broken operator management of Vault's adapters.
Vulnerability Details
AlchemistCurator's operator is supposed to manage the adapters ( strategies ) of the Morpho Vault - as we can see methods setStrategy and removeStrategy are protected with the modifier onlyOperator and these methods serve for adding or removing adapters from the Vault.
However the nature of Morpho's Vault require these actions to be processed as timelocked action, meaning the right approach is first to initiate a timelock action and after the waiting period has passed only then the changes can be applied to the vault wether it's adding or removing of an adapter ( source - https://docs.morpho.org/curate/concepts/roles#capabilities-1 ).
Inside AlchemistCurator (https://github.com/alchemix-finance/v3-poc/blob/immunefi_audit/src/AlchemistCurator.sol) we can see the operator has the ability to start the IVaultV2.addAdapter auction inside method _submitSetStrategy, but there isn't the same method for removing a strategy. The operator can finalize a removing adapter auction through the existing method removeStrategy, but this method is worthless as the operator cannot initiate the auction for removing an adapter as there is missing method that requests vault.submit() with parameter data abi.encodeCall(IVaultV2.removeAdapter, adapter).
Impact Details
AlchemistCurator's operator not being able to properly manage adapters for the Vault - can only set adapters, but cannot remove them.
Recommendation
Consider introducing 2 new methods to AlchemistCurator.sol which are submitRemoveStrategy and _submitRemoveStrategy, just the same way as the already existing submitSetStrategy and _submitSetStrategy. This will allow the operator to be able to also to remove adapters from the Vault:
From here after the waiting period for auction has passed now the operator can successfully request the method removeStrategy.
Proof of Concept
Proof of Concept
Create test PoC file src/test/AlchemistCurator.ImpossibleOperatorRemoveStrategy.t.sol and run with command forge test src/test/AlchemistCurator.ImpossibleOperatorRemoveStrategy.t.sol -vv:
This PoC shows that after successfully setting an adapter to the Vault, the AlchemistCurator's operator is stuck with removing it.
Was this helpful?