In _withdrawFromVault
, withdrawn assets are sent to address(this)
(LendingPool
), but they should be sent to reserve.reserveRTokenAddress
(RToken
), as RToken
holds all non-vault reserve assets (crvUSD
).
LendingPool
should never directly hold reserve assets, which is currently the issue:
The Curve vault's withdraw function sends the assets to the receiver
(LendingPool
passes address(this)
):
High: Reserve assets get stuck in LendingPool
and borrowers cannot receive their borrowed funds.
Use RToken
as the receiver. Additionally, update the owner to address(this)
(see the submission "Incorrect owner in vault withdrawal" for this vulnerability):
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.