Chainlink aggregators have a built-in circuit breaker if the price of an asset goes outside of a predetermined price band. The result is that if an asset experiences a huge drop in value (i.e. LUNA crash) the price of the oracle will continue to return the minPrice instead of the actual price of the asset and vice versa.
The LiquidationPool::distributeAssets function uses Chainlink::latestRoundData() function to retrieve EUR/USD and Token/USD prices. When latestRoundData() is called it requests data from the aggregator. The aggregator has a minPrice and a maxPrice. If the price falls below the minPrice instead of reverting it will just return the min price.
If the price feed retrieved from Chainlink in LiquidationPool::distributeAssets for asset is incorrect due to the aggregator not updating the price below the minPrice, the contract would use this incorrect price to calculate the distribution of assets and the cost in EUROs. This could result in users receiving a disproportionate amount of assets for their stake, or the contract burning more EUROs than necessary, based on the inflated price.
Manual Review
Add the following checks after retrieving the price from Chainlink oracle:
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.