The lender can manipulate the interest of existing loans by launching an auction, modifying the pool’s interest and then buying the loan back.
(1) Angela decides to scam protocol users. She sets up a pool with a very low interest rate (let’s say 1%), a normal maxLoanRatio and a short auctionLength (let’s say 1 hour);
(2) Alice sees the pool and decides it’s a good idea to borrow a hefty amount.
(3) Angela calls the startAuction function and waits.
(4a) If there’s no competition, Angela waits until there’s 1 minute left in the auction duration period, she calls updateInterestRate and then buyLoan.
(4b) If there is competition, Angela waits until someone calls the buyLoan function. She spots the transaction in the mempool and frontruns it with her two function calls updateInterestRate and buyLoan.
Please see below:
In the example above, at the 15 minutes mark Angela called her updateInterestRate with the computed currentAuctionRate and then called buyLoan.
If Angela had no competition she would have pulled the trigger at the 59 minutes mark:
Moreover Angela can call the updateInterestRate function again to return the interest rate of the pool back to the initial value, to use the same pool in order to scam her next victim.
Lender can increase the interest of past loans causing financial losses to the borrower.
Forge tests + manual review
Set a minimal auction duration.
Lower the maximum interest rate.
Make it impossible for the current lender to buy the loan using the same pool that gave out the loan. It won’t stop him using a second address and a second pool, but at least it will increase the costs of the exploit.
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.