Normal behavior:
In an ERC-721 contract, the BidBeasts::burn() function should only be callable by the token owner, an approved operator, or the contract owner (depending on intended design). This ensures that NFTs cannot be arbitrarily destroyed by outsiders.
Specific issue:
The current implementation of BidBeasts::burn(uint256 _tokenId) is declared public without any access control checks. There is no onlyOwner modifier, nor is ownership/approval of the token verified. As a result, any external address can call BidBeasts::burn() with any tokenId, effectively destroying NFTs owned by others.
Likelihood: High
Anyone interacting with the contract can execute the function — no privilege is required.
Attackers can trivially select any existing tokenId and burn it.
Impact: Critical
Loss of assets: NFT owners permanently lose their tokens without consent.
Protocol collapse: Entire collections can be destroyed, rendering the marketplace and ecosystem worthless.
Market disruption: Marketplaces relying on the collection break, ownership proofs vanish, and buyer confidence is destroyed.
The following test shows how a malicious address (HACKER) can burn a token owned by someone else (SELLER):
Result:
This demonstrates that any arbitrary address can destroy NFTs they do not own.
Depending on intended design, apply one of the following fixes:
If only the contract owner should be able to burn NFTs:
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.