The attendPerformance
function is designed to allow a user to attend a performance only if a cooldown period has passed since their last check-in. This mechanism is intended to throttle repeated usage and prevent abuse of rewards or attendance-based mechanics.
Root cause
lastCheckIn[msg.sender]
is shared across all performances but not updated until after the check, making it possible to call the function repeatedly with different performance IDs within the same cooldown window.
Likelihood:
This issue is likely to occur in any system where performances are frequent and rewards are significant.
Requires minimal technical knowledge — an attacker only needs to know how to call the attendPerformance
function repeatedly with different performance IDs.
If cooldown is used as an anti-bot or spam protection, this vulnerability defeats its purpose.
Impact:
Users can bypass the intended cooldown by attending different performances back-to-back.
This undermines rate-limiting logic, which might be in place to control reward farming or prevent spam.
In systems where attending a performance grants tokens, NFTs, or other benefits, a user could abuse this flaw to claim unfair rewards in a short period.
Could lead to economic imbalance or unfair distribution of incentives in a live environment.
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.