The redeemMemorabilia() function calls burnFrom() directly on the BEAT token without validating the result:
This assumes the token:
Correctly burns tokens
Reverts on failure
Or always returns true on success
However, not all ERC20 tokens follow the same standard strictly. Some tokens:
Return false instead of reverting
Return nothing at all (e.g., USDT)
Fail silently (no revert, no error)
This leads to a false success assumption, allowing the contract to continue execution even if tokens were not burned.
Impact:
If the token transfer/burn silently fails:
The user receives an NFT without spending BEAT tokens
An attacker can exploit this to mint unlimited NFTs for free
This breaks the economic security of the memorabilia redemption logic
Create a fake BEAT token that overrides burnFrom() like this:
Call redeemMemorabilia() from an EOA or contract:
NFT gets minted because no check was made on burnFrom()’s result.
Use OpenZeppelin's SafeERC20 wrapper to ensure safe token interactions:
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.