Normal behavior: Only the token owner or an approved operator should be able to burn an ERC-721 token.
Issue: The public burn(uint256 tokenId) calls _burn(tokenId) without any authorization check. OpenZeppelin’s internal _burn assumes the caller already enforced permissions, so as written any external address can burn any token—including tokens held in escrow by the marketplace during a live listing.
Likelihood:
Happens whenever someone calls burn(tokenId) on an existing token.
Occurs in normal operation because no gatekeeping is present on the public burn.
Impact:
While listed (escrowed in marketplace): Attacker can burn the listed token, causing settlement functions to revert and potentially stranding bidder funds (auction DoS/griefing).
While not listed: Attacker can destroy users’ NFTs at will (permanent asset loss).
Explanation:
In both cases, _burn checks token existence but does not verify that msg.sender is owner or approved. Because the public burn never enforces that check, anyone can call it and succeed.
Mitigation explanation:
Adding this require makes burn match standard ERC-721 authorization semantics, preventing arbitrary destruction.
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.