The attendPerformance
function tracks attendance using only the caller's address (msg.sender
) rather than tracking which specific NFT was used to attend each performance. This design flaw allows users to mint unlimited BEAT tokens by transferring their pass NFT to different addresses and having each address attend the same performance, effectively allowing one NFT to generate infinite rewards.
The vulnerability occurs because of how the attendPerformance
function tracks who has attended each performance:
Key issues:
hasAttended
mapping only considers the caller's address
No tracking of which specific NFT (token ID) was used for attendance
NFT transfers reset attendance eligibility since new addresses haven't "attended"
Likelihood: High - The exploit is straightforward and can be automated. Any user with a pass can immediately start the attack.
Impact: Critical - Infinite BEAT token minting breaks the entire tokenomics system, devalues rewards, and can drain any connected systems expecting finite token supply.
High severity because:
Attackers can mint unlimited BEAT tokens with a single festival pass
Breaks the entire reward economy and tokenomics design
Renders the performance attendance system meaningless
Can be executed repeatedly across multiple performances for massive gains
Affects the value of BEAT tokens for legitimate users
Could drain connected systems if BEAT has utility or exchange value
This test demonstrates how a single NFT can be used to claim infinite BEAT tokens by transferring between addresses:
Option 1: Add a pass selection parameter to allow users to choose which pass to use:
This approach:
Allows users to specify which pass they want to use for each performance
Enables users with multiple passes to attend multiple times (once per pass type)
Prevents the same pass from being used multiple times via transfers
Maintains the intended multiplier system
Option 2: Track attendance by actual NFT token instances if using unique token IDs for each pass, or prevent pass transfers during active performances.
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.