57251 sc low curator cannot remove adapter due to timelock requirement
Submitted on Oct 24th 2025 at 18:17:29 UTC by @JoeMama for Audit Comp | Alchemix V3
Report ID: #57251
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
Description
Brief/Intro
The Curator contract interacts with a Morpho Vault, this VaultV2 uses a timelock mechanism for sensitive functions such as adding and removing adapters. While adding an adapter works as expected because it creates a timelock for this request beforehand ( submit IVaultV2.addAdapter), removing an adapter fails because setting a timelock (submit IVaultV2.removeAdapter) beforehand is missing.
When a curator adds a new strategy, the process involves two steps:
Submitting the new adapter: ( this will start the timelock for this process )
bytes memory data = abi.encodeCall(IVaultV2.addAdapter, adapter);
vault.submit(data); Executing the addAdapter ( this will execute if the previous timelock is expired)
After the timelock expires, setStrategy calls vault.addAdapter(adapter) to finalize adding the adapter.
Vulnerability Details
However, when removing a strategy, the function removeStrategy calls:
without first submitting the removal action for timelock approval:
As a result, the following check in the vault fails:
Because no pending timelock entry exists for that removeAdapter call.
The relevant code snippet:
Since removeAdapter is timelocked, it must first be submitted before execution.
Impact Details
The curator is unable to remove adapters because the required timelock submission step is missing. As a result, removeStrategy reverts on the vault’s timelock check, now the adapter cannot be removed.
Remediaton
Add a function to be able to queue adapter removal via the vault’s timelock using: (IVaultV2.removeAdapter)
References
Add any relevant links to documentation or code
Proof of Concept
Proof of Concept
Curator calls
submitSetStrategyto add a adapterCurator calls
setStrategyafter the previous step's timelock is expired and it will add the adapterCurator calls
removeStrategyto remove the adapter, however it fails because submitting the (IVaultV2.removeAdapter) data is not set for this data
Please add the following test to the existing AlchemistCuratorTest suite.
Was this helpful?