56528 sc insight unbounded slippagebps can freeze withdrawals
Submitted on Oct 17th 2025 at 09:40:39 UTC by @OxPrince for Audit Comp | Alchemix V3
Report ID: #56528
Report Type: Smart Contract
Report severity: Insight
Target: https://github.com/alchemix-finance/v3-poc/blob/immunefi_audit/src/MYTStrategy.sol
Impacts:
Permanent freezing of funds
Description
Brief/Intro
slippageBPS is accepted from strategy params without validation in MYTStrategy and stored both in params.slippageBPS and the local copy slippageBPS.
Every concrete strategy subtracts
slippageBPS / 10_000from withdrawal previews. When the value exceeds 10_000 (100%), the subtraction underflows and reverts because Solidity 0.8+ guards against underflow.The allocator and shared tests rely on
previewAdjustedWithdrawto size withdrawals. A revert here prevents operators from computing safe withdrawal amounts and blocks standard deallocation workflows.
Vulnerability Details
Constructor leaves slippageBPS unchecked (src/MYTStrategy.sol:79-99). No subsequent setter clamps it either.
Multiple strategies inherit this behaviour; for example:
StargateEthPoolStrategy._previewAdjustedWithdraw(src/strategies/optimism/StargateEthPoolStrategy.sol:96-99)MoonwellWETHStrategy._previewAdjustedWithdraw(src/strategies/optimism/MoonwellWETHStrategy.sol:81-89)FluidARBUSDCStrategy._previewAdjustedWithdraw(src/strategies/arbitrum/FluidARBUSDCStrategy.sol:51-55)
Shared test helpers and the allocator code path call
previewAdjustedWithdrawbefore deallocations (src/test/libraries/BaseStrategyTest.sol:140-151,src/AlchemistAllocator.sol:46-65), so any revert there halts the withdrawal flow.
Impact Details
Misconfigured deployments with
slippageBPS > 10_000make everypreviewAdjustedWithdrawcall revert, preventing vault operators from calculating deallocation amounts through the intended interface.Because the allocator is expected to follow the documented flow, withdrawals become operationally blocked until the contract is upgraded or replaced, effectively freezing funds managed by that strategy.
References
Add any relevant links to documentation or code
Proof of Concept
Proof of Concept
forge test --match-test previewAdjustedWithdrawRevertsWhenSlippageExceedsOneHundredPercent -vvvv
│ │ └─ ← [Return] true │ └─ ← [Return] 7080 bytes of code ├─ [0] VM::expectRevert(custom error 0xf28dceb3: $NH{q) │ └─ ← [Return] ├─ [1637] SlippagePreviewStrategy::previewAdjustedWithdraw(1000000000000000000 [1e18]) [staticcall] │ └─ ← [Revert] panic: arithmetic underflow or overflow (0x11)
Was this helpful?