An oracle deprecation might lead the protocol to sell assets for a low price
mediumLines of code
Vulnerability details
During a Dutch Auction, if a user places a bid, the trade is settled in the same transaction. As part of this process, the backing manager tries to call the rebalance() function again.
The call to rebalance() is wrapped in a try-catch block, if an error occurs and the error data is empty, the function will revert.
The assumption is that if the error data is empty that means it was due to an out-of-gas error, this assumption isn't always true as mentioned in a previous issue (that wasn't mitigated). In the case of this issue, this can result in a case where users can't bid on an auction for some time, ending up selling an asset for a price lower than the market price.
Impact
Protocol's assets will be auctioned for a price lower than the market price
Proof of Concept
Consider the following scenario:
- Chainlink announces that an oracle will get deprecated
- Governance passes a proposal to update the asset registry with a new oracle
- A re-balancing is required and executed with a Dutch Auction
- The oracle deprecation happens before the auction price reaches a reasonable value
- Any bid while the oracle is deprecated will revert
- Right before the auction ends the proposal to update the asset becomes available for execution (after the timelock delay has passed). Somebody executes it, bids, and enjoys the low price of the auction.
Recommended Mitigation Steps
On top of checking that the error data is empty, compare the gas before and after to ensure this is an out-of-gas error.
Assessed type
Error
