In buyLoan(), there is no validation if the loanRation < pool.maxLoanRatio
. Therefore, a lender can be given a loan with higher LTV than his pool which he doesn't want at all.
Since buyLoan() can be called by anyone, a malicious borrower can borrow a loan from his own pool with a pretty high maxLoanRatio
so that he can put the least collateral possible to take the loan, then forcefully push this loan by calling buyLoan()
with his own loan to a random pool with enough pool balance of the pairs. Doing this helps the borrower avoid the risk of high LTV.
We mint the loanToken
to borrower
so that he can set up his pool in setUp() function of Lender.t.sol
Paste this code into Lender.t.sol
: https://github.com/Cyfrin/2023-07-beedle/blob/main/test/Lender.t.sol.
Right here the borrower set up his pool with very high maxLoanRatio
of 5 and borrow the loan himself/herself.
Paste this code into Lender.t.sol
: https://github.com/Cyfrin/2023-07-beedle/blob/main/test/Lender.t.sol.
Right here the borrower
starts the auction for his loan and call buyLoan()
with the pool of lender1
, which only has the maxLoanRatio
value of 1. The test goes through successfully, meaning the loan is bought to the new pool and the borrower
can now enjoy his high LTV loan being managed by the new pool (lender1
)
Use forge test --mt test_bypassMaxLoanRatio
to run this test case.
Borrower can give his high LTV loan to any pool with enough balance by calling buyLoan()
to escape the risk of high LTV.
Anyone or the new lender himself/herself can buy the loan via buyLoan()
without noticing the high LTV in it, which may lead to fund losing.
Manual
Consider implement a validation for the loan ratio like other functions in the contract after line 485.
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.