A borrower will become worse off when their auctioned loan is bought by a pool with a higher interest rate.
The relevant contest details read: Lenders can give away their loan at any point so long as, the pool they are giving it to offers same or better lending terms...When a lender no longer wants to be in a loan, but there is no lending pool available to give the loan to, lenders are able to put the loan up for auction.... Anyone is able to match an active pool with a live auction when the parameters of that pool match that of the auction or are more favorable to the borrower.
The idea conveyed here is that if a lender doesn't want a loan anymore in their pool, they can give the loan to another pool either directly or via auction, as long as the other pool has the same or better lending terms. The most important lending term is the interest rate, and Lender.buyLoan() never checks if the buying pool's interest rate is the same or lower than the old pool's. This means that an auctioned loan can be bought into a pool with a higher interest rate where the borrower will be worse off.
Proof of concept, first add these utility functions to Lender.sol:
Then add this test to test/Lender.t.sol:
Borrower will be worse off as they will have a higher interest rate, breaking the written system requirements.
Manual
Lender.buyLoan() must ensure that the buying pool's interest rate is equal to or lower than the old pool's interest rate.
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.