georgits
medium
https://github.com/sherlock-audit/2023-05-USSD/blob/main/ussd-contracts/contracts/oracles/StableOracleDAI.sol#L48 https://github.com/sherlock-audit/2023-05-USSD/blob/main/ussd-contracts/contracts/oracles/StableOracleWBTC.sol#L23 https://github.com/sherlock-audit/2023-05-USSD/blob/main/ussd-contracts/contracts/oracles/StableOracleWETH.sol#L23
Chainlink's latestRoundData can return stale or incorrect result
In StableOracleDAI.sol, StableOracleWBTC.sol and StableOracleWETH.sol is used latestRoundData()
, but there is no check if the return value indicates stale data. This could lead to stale prices
(, int256 price, , , ) = priceFeedDAIETH.latestRoundData();
(, int256 price, , , ) = priceFeed.latestRoundData();
(, int256 price, , , ) = priceFeed.latestRoundData();
Manual Review
Add checks for the returned data after calling latestRoundData()
(uint80 roundID, int256 price, uint256 timestamp, uint256 updatedAt, ) = priceFeed.latestRoundData();
require(updatedAt >= roundID, "Stale price");
require(timestamp != 0,"Round not complete");
require(price > 0,"Chainlink answer reporting 0");