In the profitability checks of the claimAndSwap function across all strategy variants (StrategyArb.sol, StrategyMainnet.sol, StrategyOp.sol).
The affected code with the root cause indicator
The vulnerability is because the contract assumes that receiving more alETH than the WETH input guarantees profitability. This assumption is incorrect because:
The check minOut > amount only compares nominal amounts
The balance comparison balAfter - balBefore >= _minOut fails to account for the true value relationship between WETH and alETH
No oracle or price verification is implemented to ensure the exchange rate is favorable
This allows a keeper to execute trades that pass all current checks but actually decrease the total value of the strategy's holdings, breaking the core invariant that all keeper actions should be profitable.
The bug incubets in the claimAndSwap function, which is implemented similarly across all chains.
because the profitability check relies solely on comparing nominal amounts:
In StrategyOp.sol (Optimism)#_swapUnderlyingToAsset
In StrategyMainnet.sol (Ethereum)#claimAndSwap
In StrategyArb.sol (Arbitrum)#_swapUnderlyingToAsset
This affects all three blockchain deployments (Optimism, Ethereum, Arbitrum) and allows:
Value extraction through seemingly profitable but actually loss-making trades
Gradual erosion of strategy value through repeated suboptimal swaps
Manipulation of swap routes to extract value while passing all current checks
The issue is particularly severe because it affects the core profit-making mechanism of these strategies across all supported chains and DEXes (Velodrome, Curve, Ramses).
The core issue lies in this assumption
This check assumes that receiving more alETH than the WETH input automatically means profit. However, this is incorrect because:
WETH and alETH can have different market values
The transmuter allows 1:1 redemption of alETH for WETH
The strategy should only swap when it can get a premium above the 1:1 rate
The balance check is also insufficient:
This only verifies the received amount matches expectations but doesn't validate if the trade was actually profitable compared to the 1:1 redemption rate available through the transmuter.
The missing price validation: None of the implementations (Velodrome on Optimism, Curve on Mainnet, Ramses on Arbitrum) include proper price checks against:
Current market rates
Transmuter redemption rate
Minimum profitable premium threshold
This allows keepers to execute trades that pass the nominal amount checks but actually reduce the strategy's total value, breaking the core requirement that keeper actions must be profitable.
Enforces a minimum premium requirement above the 1:1 transmuter rate
Properly tracks and validates total value changes
Ensures trades are profitable relative to the base redemption rate
Provides transparency through a view function for minimum output calculation
The approach works across all implementations:
Velodrome (Optimism)
Curve (Mainnet)
Ramses (Arbitrum)
This solution maintains the strategy's core functionality while protecting against value-extracting trades.
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.