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.