After successful liquidation, NFTs are transferred to the StabilityPool contract which lacks any functionality to transfer them out, resulting in permanently locked NFTs.
When liquidating a borrower, by calling liquidateBorrower() function, the LendingPool::finalizeLiquidation function is called, which performs some additional actions to close the user's position, and also transfers his NFTs to the StabilityPool:
However, the StabilityPool contract has no functionality to transfer out or approve other addresses to transfer the NFTs once they are received. This means that after liquidation, the NFTs become permanently locked in the contract.
User deposits NFTs as collateral in LendingPool
User's position becomes undercollateralized and liquidation is initiated
After grace period expires, StabilityPool calls LendingPool::finalizeLiquidation
NFTs are transferred to StabilityPool
NFTs are now permanently locked as StabilityPool has no functions to transfer or approve them
All NFTs that are transferred to the StabilityPool after liquidation become permanently locked with no way to recover them. This represents a complete loss of value for those assets.
Add NFT transfer functionality to StabilityPool:
Add NFT approval functionality:
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.