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.