Core Contracts

Regnum Aurum Acquisition Corp
HardhatReal World AssetsNFT
77,280 USDC
View results
Submission Details
Severity: high
Valid

Stability Pool Has No Mechanism to Retrieve Liquidated NFTs

Summary

The Stability Pool contract lacks any functionality to retrieve or manage NFTs received during liquidations, effectively creating a permanent lock of these assets in the contract.

Vulnerability Details

In the LendingPool contract, when a liquidation is finalized, all NFTs are transferred to the Stability Pool:

// In LendingPool.finalizeLiquidation:
for (uint256 i = 0; i < user.nftTokenIds.length; i++) {
uint256 tokenId = user.nftTokenIds[i];
user.depositedNFTs[tokenId] = false;
raacNFT.transferFrom(address(this), stabilityPool, tokenId);
}

However, examining the Stability Pool contract reveals that there's no mechanism to retrieve the nfts or transfer them.

Impact

High, Permanent loss of NFT value.

Tools Used

Manual Review

Recommendations

Add a retrieval nft function:

function recoverNFT(uint256 tokenId, address recipient) external onlyOwner {
require(receivedNFTs[tokenId], "NFT not in pool");
IRAACNFT(raacNFT).transferFrom(address(this), recipient, tokenId);
receivedNFTs[tokenId] = false;
}
Updates

Lead Judging Commences

inallhonesty Lead Judge 7 months ago
Submission Judgement Published
Validated
Assigned finding tags:

Liquidated RAACNFTs are sent to the StabilityPool by LendingPool::finalizeLiquidation where they get stuck

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.

Give us feedback!