The normal behavior of an NFT contract is that only the token owner or an approved operator should be able to burn a token they own. This ensures users retain control of their assets and prevents malicious destruction.
In the current BidBeasts implementation, the burn(uint256 _tokenId) function is public and unrestricted. It does not check ownership or approval before calling _burn(). As a result, anyone can burn any NFT, even if they are not the owner.
Likelihood:
Any address can directly call burn(tokenId) at any time.
This requires no special permissions or preconditions.
Impact:
NFTs can be destroyed without the consent of their rightful owners.
Active marketplace auctions that rely on existing NFTs will revert permanently during settlement, leading to a denial of service for the marketplace.
Below is a PoC test . It shows how an attacker (BIDDER_1) can burn the SELLER’s NFT even though they don’t own it.
Outcome:
The NFT owned by SELLER is destroyed by BIDDER_1. This breaks the fundamental NFT ownership guarantee and can also brick auctions in the marketplace contract.
Restrict burning to only the token owner or approved operator by using OpenZeppelin’s _isApprovedOrOwner.
In the BidBeasts ERC721 implementation, the burn function is publicly accessible, allowing any external user to burn NFTs they do not own. This exposes all tokens to unauthorized destruction and results in permanent asset loss.
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.