The KeeperProxy contract contains a critical logic error in its sequencer status check that inverts the intended behavior. This could allow trading operations to proceed when the L2 sequencer is down, potentially leading to trades at incorrect prices or with stale market data.
The vulnerability exists in the _validatePrice
function:
The contract uses Chainlink's Arbitrum Sequencer Uptime Feed (0xFdB631F5EE196F0ed6FAa767959853A9F217697D) to check sequencer status. However:
When answer == 0, it means the sequencer is DOWN
When answer == 1, it means the sequencer is UP
The current implementation has this logic reversed
Trades will be executed when the L2 sequencer is down, leading to:
Execution with stale price data
Trades at incorrect prices
Potential loss of funds due to price discrepancies
Manipulation opportunities during sequencer downtime
The issue affects all core trading functions:
Manual code review
Fix the sequencer check logic:
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.