The burn() function in BidBeasts_NFT_ERC721.sol lacks ownership or approval checks. Unlike standard ERC721 implementations such as OpenZeppelin’s ERC721Burnable, which enforce _isApprovedOrOwner(msg.sender, tokenId), this implementation allows any external account to destroy NFTs without restrictions.
Likelihood:
Very High – requires no special privileges, cost, or complex conditions. Any external address can call burn(tokenId) directly.
Impact:
Critical – Permanent and irreversible destruction of NFTs, including those owned by other users. This can cause:
Breaking ERC721 invariants (ownership and approval rules).
Potential Denial of Service (DoS): listed NFTs could be destroyed during auctions or trades.
Loss of user funds if NFTs are destroyed mid-sale.
Damage to marketplace reputation and trust.
Restrict burn() to the token owner or an approved operator by using the internal _isApprovedOrOwner() check.
Use OpenZeppelin’s ERC721Burnable as a reference.
Benefits:
Prevents unauthorized destruction of NFTs.
Preserves ERC721 ownership invariants.
Protects marketplace trust and user assets.
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.