The _withdrawFromVault function in the LendingPool contract incorrectly uses msg.sender as the owner parameter when calling Curve vault's withdraw function. Since the shares are owned by the LendingPool contract (address(this)), using msg.sender as the owner will cause the withdrawal to fail.
The issue occurs because:
During deposit, shares are minted to address(this) (LendingPool)
And as declared in the interface:
During withdrawal, msg.sender is incorrectly used as the owner parameter
As declared in the interface, the owner is the Owner of the shares:
Curve vault checks ownership of shares against the owner parameter
Since msg.sender doesn't own the shares, the withdrawal fails
All withdrawals from Curve vault will fail
Protocol cannot access deposited assets
User withdrawals and borrowing operations may be blocked
Could lead to locked funds in Curve vault
Manual
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.