The price returned by the oracle is not adequately verified, leading to incorrect pricing being accepted.
The ChainlinkUtil.sol contract is using Chainlink’s latestRoundData function in getPrice(), but is not fully validating the returned data.
The value returned from the pricefeed.latestRoundData function (answer) should be verified to ensure that the price returned by the oracle is not zero. However, this was not implemented.
For Zaros and many other protocols involving financial transactions, it is critical that the price of assets cannot be zero due to errors from Oracle. Thus, a zero-values check is consistently implemented on such kind of protocols.
One can argue that the returned value checked for minAnswer and maxAnswer bounds. But according to chainlink docs, minAnswer and maxAnswer values are no longer used on most data feeds.
The data feed aggregator includes both minAnswer and maxAnswer values. On most data feeds, these values are no longer used and they do not stop your application from reading the most recent answer. For monitoring purposes, you must decide what limits are acceptable for your application.
The protocol relies heavily on accurate pricing from the Chainlink oracle for critical operations like collateral valuation and liquidation calculations. An erroneous zero value returned by the oracle could lead to affected assets within the protocol to be considered worthless.
Manual Review
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.