The contract RAACHousePriceOracle.sol allows the deployer or owner to arbitrarily change the price oracle used in the lending system. This can allow an attacker with owner privileges to manipulate the house price to liquidate users unfairly or enable under-collateralized borrowing.
The function setOracle(address _oracle) in RAACHousePrices.sol allows the owner to change the oracle at any time.
An attacker with access to the owner role can swap the real oracle with a fake one that reports manipulated house prices.
Since the RAACHousePriceOracle determines the collateral value of an NFT-backed loan, altering the price oracle enables an attacker to artificially inflate or deflate collateral value.
This can result in unfair liquidations or arbitrage attacks.
Exploit Scenario
An attacker with owner privileges swaps the real price oracle with a fake one.
The fake oracle artificially inflates house prices, allowing under-collateralized loans.
The attacker borrows excess CRVUSD and dumps it, draining the liquidity pool.
PoC Exploit
Expected Outcome
Price manipulation enables exploiters to borrow excessive CRVUSD.
Borrowers can escape liquidation unfairly.
The lending pool suffers from bad debt accumulation.
If the oracle is swapped to one that reports inflated house prices, borrowers can take out excessive loans and dump the borrowed assets.
If the oracle reports deflated prices, lenders can liquidate borrowers unfairly and acquire valuable NFTs at a discount.
Manual Review of RAACHousePrices.sol
Slither for function privilege analysis
Implement a governance mechanism for oracle changes instead of allowing arbitrary owner control.
Introduce a timelock to prevent instant oracle swapping.
Use Chainlink decentralized oracles to ensure price data integrity.
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.