There is a mechanism in KeeperProxy::_validatePrice which validates the market prices against the Chainlink data feed to make sure the price difference is under threshold. But that is broken which makes this safeguard ineffective.
So Under KeeperProxy::``validatePrice it calling different function _check to validate the price. But it's comparing the longTokenprices with indexTokenPircewhich is actual issue. Because not all market have the same index and long token.
For e.g: As per docs the available market would going to be (WETH, WBTC, LINK). But the market of WBTC is not available in which longTokenand indexTokenis same in GMX perpetual Arbitrum.
Can be validated by `GMX::Reader::getMarkets()` (0x0537C767cDAC0726c76Bb89e92904fe28fd02fE1)
There is multiple Impact it can caused.
It would lead the call to revert making it DOS.
Becuase we could be making call at 0 address dataFeed[token]).latestRoundData()
By being the price diff too big, As we will be comparing Token A price with Token B
Ineffective price comparison putting the protocol integrity at risk
Manual Review
Likelihood: None/Very Low, everytime the keeper send a price via run/runNextAction (sent by the Gamma keeper). Impact: Medium/High, does not check the longTokenPrice, it could go out of range. Keep in mind indexToken == longToken, an error from the keeper could be considered informational.
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.