The borrow() function allows users to take out loans without without considering the protocol utilization rate (i.e., the ratio of borrowings to total deposits).
Borrowers can continue to withdraw finds even if liquidity is critically low
High utilization can trap lenders by preventing withdrawals
The protocol might fail to liquidate bad debts due to lack of available liquidity.
Since interest rate and borrowing limits should scale with utilization, the lack of utilization check makes it easy to for whales to drain liquidity harming the protocol’s sustainability
The protocol has plenty of liquidity and a low borrowing rate.
An attackers borrows a large amount without restrictions
This drains liquidity, making it impossible for lenders to withdraw
The attackers can now manipulate interest rates, making borrowing expensive for new users
if the market conditions worsen, borrowers default, and the protocol has no funds left to cover bad debt leading to insolvency.
Liquidity crisis: If utilization reaches 100%, no funds remain for withdrawals, leading to lender losses and possible liquidation failures.
interest rate manipulation: attackers can artificially push utilization up by borrowing large amounts, making future loans unaffordable.
Manual Review
Enforce a utilization cap (e.g., 90%) before allowing new borrowing
Dynamically adjust borrowing rates based on utilization to discourage excessive borrowing
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.