The configurePass()
function allows organizers to update pass pricing and maximum supply limits, but contains a critical flaw where it resets the current supply counter (passSupply[passId] = 0
) regardless of how many passes have already been sold.
This reset allows the protocol to sell additional passes up to the new maximum limit, potentially resulting in total sales that far exceed the intended capacity limits.
Docs states "...attend virtual(or not) performances...". Since festival venues have physical capacity constraints for safety reasons, this vulnerability can lead to dangerous overcrowding situations.
Organizer initially configures VIP passes: configurePass(2, 0.1 ether, 100)
setting maximum supply to 100
Users purchase 90 VIP passes through buyPass()
, bringing passSupply[VIP_PASS]
to 90
Organizer calls configurePass()
again to update pricing: configurePass(2, 0.15 ether, 100)
The function resets passSupply[VIP_PASS] = 0
despite 90 passes already being sold
Protocol now allows 100 additional VIP passes to be sold through buyPass()
Total VIP passes in circulation: 190 (90 original + 100 new) exceeding the intended 100 limit
190 VIP holders attempt to access a venue designed for maximum 100 VIP attendees
Venue overcrowding beyond designed capacity limits creates risk of injuries, stampedes, and emergency evacuation difficulties
Exceeding fire safety and building capacity codes may result in legal liability and event shutdown
Overcrowding hampers emergency services access and crowd management
Overcrowded VIP areas lose exclusivity value and comfort promised to premium ticket holders
Organizers can intentionally exploit this to oversell passes for financial gain at the expense of safety
Safety incidents or poor experiences damage festival brand and future attendance
Remove the supply counter reset from configurePass()
and add validation:
Alternatively, implement separate functions for price updates vs initial configuration to prevent accidental supply resets.
This is not acceptable as high because any attack vectors related to organizer trying to milk ETH from participants is voided by the fact that the organizer is trusted.
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.