The LendingPool::getNFTPrice function retrieves NFT prices from the oracle but fails to validate the lastUpdateTimestamp returned by the oracle. This allows stale price data to be used when calculating user collateral value, which is critical for determining borrowing capacity and liquidation conditions.
The issue affects multiple key functions that rely on NFT price data:
calculateHealthFactor
getUserCollateralValue
borrow
withdrawNFT
An attacker could exploit this by:
Waiting for favorable stale prices that overvalue their NFT collateral
Using the inflated collateral value to borrow more than they should be allowed
Defaulting on the loan, leaving the protocol with bad debt
Add a maximum staleness check for oracle prices:
Consider also:
Adding a configurable MAX_PRICE_AGE parameter
Implementing a grace period for price updates before blocking operations
Adding emergency pause functionality if oracle fails to update prices
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.