LendingPool::finalizeLiquidation transfers NFTs to the StabilityPool during liquidation. It uses transferFrom() instead of safeTransferFrom so transaction will be successful and will not revert.
However, the StabilityPool contract is not properly equipped to handle NFT transfers as it. It does not implement onERC721Received function that should handle NFT in smart contracts.
The NFTLiquidator contract has the same issue. It receives NFTs from StabilityPool during liquidation process when StabilityPool is calling NFTLiquidator::liquidateNFT function
As soon as liquidateNFT function uses transferFrom instead of safeTransferFrom, the transaction will be successful and will not revert. But the NFTLiquidator contract lacks proper NFT handling capability, which leads to issues
NFTs transferred to StabilityPool and NFTLiquidator contracts during liquidation process can become permanently locked
Breaks the liquidation and auction mechanism of the protocol
Loss of user collateral value
Protocol's inability to recover bad debt through NFT auctions
Add onERC721Received function toStabilityPool and NFTLiquidator contracts.
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.