The StabilityPool
contract lacks functionality to handle NFTs received during liquidations, resulting in permanent loss of these assets as they become locked in the contract.
In the StabilityPool::liquidateBorrower()
function when a liquidation is finalized through lendingPool.finalizeLiquidation(userAddress)
, NFTs from the liquidated position are transferred to the StabilityPool
. However, the contract has no functionality to manage, withdraw, or handle these NFTs in any way.
The issue is particularly concerning because:
There are no functions to retrieve NFTs
No NFT transfer/management capabilities exist
Even the contract owner cannot rescue locked NFTs
The contract is upgradeable but lacks NFT handling in its initial design, which is needed from the beginning to tokenize the NFTs for users participating in the StabilityPool
.
When borrowers are liquidated, their NFT collateral becomes permanently locked in the StabilityPool contract with no possibility of recovery. This leads to:
Permanent loss of valuable NFT assets
Value loss for both the protocol and users
Manual review
Add the following test case to the test/e2e/protocols-tests.js
file:
Add NFT management functionality
Implement a systematic NFT handling mechanism during liquidations
Auction system for NFTs
Distribution to stability providers
Direct sale mechanism
Add NFT recovery functions for emergency situations
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.