A critical vulnerability exists in the LendingPool's vault integration (LendingPool._depositIntoVault
) where reserve assets cannot be deposited to Curve due to missing asset transfers from the RToken contract. This breaks the protocol's liquidity rebalancing mechanism, rendering core functionality (deposits/withdrawals/borrowing) inoperable. The root cause is the incorrect assumption that reserve assets reside in the LendingPool rather than the RToken contract, leading to failed vault deposits when rebalancing liquidity buffers. This high-severity issue fundamentally disrupts protocol operations until resolved.
The vulnerability exists in the liquidity rebalancing mechanism of the LendingPool contract. The LendingPool._depositIntoVault
function (LendingPool.sol#L799-L803) attempts to deposit reserve assets directly from the LendingPool's balance without first transferring them from the RToken contract where they are actually held.
Key issues:
Incorrect Asset Location: Reserve assets are stored in the RToken contract, not in the LendingPool itself
Missing Transfer Step: The current implementation skips the critical step of transferring assets from RToken to LendingPool before vault deposition
Failed State Transitions: This omission causes all operations dependent on liquidity rebalancing (LendingPool._rebalanceLiquidity
) to fail due to insufficient balances
This vulnerability has critical protocol-wide consequence:
Complete Operational Failure:
All deposit/withdraw/borrow operations will revert when triggering liquidity rebalances, effectively freezing user funds and halting core protocol functionality.
Manual Review
Modify LendingPool._depositIntoVault
to first transfer assets from RToken:
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.