The StrategyMainnet.sol
contract's claimAndSwap
function using Curve's exchange lacks a deadline check, while the other two similar contracts (StrategyOp and StrategyArb) do include timestamps. This inconsistency could lead to stale transactions being executed at unfavorable prices.
StrategyMainnet.sol:
Compared to StrategyOp.sol and StrategyArb.sol which both have deadlines:
The root cause is:
Curve's router accepts a deadline parameter but it's not being used
Other strategies enforce transaction expiry but StrategyMainnet doesn't
No expiry check means transactions can be executed at any future time
Let's walk through a real scenario:
Initial State:
WETH/alETH price is 1:1.5
Keeper submits claimAndSwap for 100 WETH with minOut = 101 alETH
Transaction Gets Stuck:
Price Changes:
Two hours later, WETH/alETH price moves to 1:1.8
Old transaction is still valid because no deadline
MEV bot can now execute the old transaction
Result:
Strategy gets only 101 alETH instead of 180 alETH at current price
79 alETH in value lost
This vulnerability is rated as HIGH severity because:
Direct financial loss possible through stale execution
Inconsistent with other strategy implementations
No protection against unfavorable price movements
High probability of occurrence during market volatility
Add deadline parameter to StrategyMainnet:
Enforce reasonable deadline windows:
Files to update:
StrategyMainnet.sol: Lines 85-110
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.