Summary
When loan is bought by new lender or given by old lender, new loan will be originated from new pool.
So, it should update auctionLength
to new pool's auctionLength
Vulnerability Details
https://github.com/Cyfrin/2023-07-beedle/blob/main/src/Lender.sol#L416-L420
loans[loanId].lender = pool.lender;
loans[loanId].interestRate = pool.interestRate;
loans[loanId].startTimestamp = block.timestamp;
loans[loanId].auctionStartTimestamp = type(uint256).max;
loans[loanId].debt = totalDebt;
https://github.com/Cyfrin/2023-07-beedle/blob/main/src/Lender.sol#L518-L522
loans[loanId].lender = msg.sender;
loans[loanId].interestRate = pools[poolId].interestRate;
loans[loanId].startTimestamp = block.timestamp;
loans[loanId].auctionStartTimestamp = type(uint256).max;
loans[loanId].debt = totalDebt;
Impact
New auction length will not be same as specified in pool after calling buyLoan()
or giveLoan()
Tools Used
Manual Review
Recommendations
Lender.buyLoan()
,Lender.giveLoan()
should update auctionLength
to pool's auctionLength
.
https://github.com/Cyfrin/2023-07-beedle/blob/main/src/Lender.sol#L416-L420
loans[loanId].lender = pool.lender;
loans[loanId].interestRate = pool.interestRate;
loans[loanId].startTimestamp = block.timestamp;
loans[loanId].auctionStartTimestamp = type(uint256).max;
loans[loanId].debt = totalDebt;
+ loans[loanId].auctionLength = pool.auctionLength
https://github.com/Cyfrin/2023-07-beedle/blob/main/src/Lender.sol#L518-L522
loans[loanId].lender = msg.sender;
loans[loanId].interestRate = pools[poolId].interestRate;
loans[loanId].startTimestamp = block.timestamp;
loans[loanId].auctionStartTimestamp = type(uint256).max;
loans[loanId].debt = totalDebt;
+ loans[loanId].auctionLength = pools[poolId].auctionLength