Normal Behavior: If an auction ends without meeting the minPrice, the listed NFT should be returned to the original seller.
Specific Issue: The marketplace logic only provides a way to finalize a successful auction (settleAuction). The settleAuction function contains a strict check: require(bids[tokenId].amount >= listing.minPrice, "Highest bid did not meet min price");. If the highest bid is below minPrice, the function reverts. Since no alternative function exists to handle an unsuccessful auction, the NFT becomes permanently locked in the marketplace contract.
Likelihood:
This will occur in every auction that receives bids but fails to reach the minimum price.
The current implementation makes asset recovery impossible via contract logic.
Impact:
Permanent loss of seller's NFT access.
Breach of core marketplace business logic, preventing the seller from relisting or reclaiming their asset.Proof of Concept
This PoC simulates an auction where a bid is placed below the MIN_PRICE. The subsequent call to settleAuction reverts, leaving the NFT locked with the contract.
A new function, retrieveUnsoldNFT, must be implemented. This function should be restricted to the original seller and allow the NFT to be reclaimed if the auction deadline has passed and the minimum price was not met.
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.