When a user calls LendingPool::withdraw to withdraw more assets than are available in the reserveRToken contract, the system calls _withdrawFromVault via _ensureLiquidity to withdraw additional funds from the crvUSDvault. However, the retrieved assets are not routed to the reserveRToken contract as intended. Instead, they are sent to the LendingPool contract. As a result, when ReserveLibrary::withdraw is called, it fails due to insufficient funds in the reserveRToken contract.
The issue occurs in LendingPool::withdraw when available liquidity in the reserveRToken contract is insufficient to cover the withdrawal. _ensureLiquidity tries to withdraw the missing amount from the crvUSDvault, but the assets are not routed to reserveRTokenAddress. This leaves the reserveRToken contract underfunded.
Failed transactions due to insufficient liquidity in the reserveRToken contract.
Manual review
Send Withdrawn Assets to reserveRTokenAddress
Modify _withdrawFromVault to route the assets to reserveRToken to ensure liquidity is correctly replenished:
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.