Normal behaviour: configurePass() should set the price and maximum supply once at launch, while passSupply[passId] keeps an accurate count of how many passes have already been minted.
Issue: Every time the organiser calls configurePass() the line below resets the minted counter to zero, letting the contract mint maxSupply more tokens on top of the existing supply, thereby breaking the advertised scarcity.
Likelihood:
The organiser inevitably needs to tweak pricing or supply during operations.
Each tweak triggers the buggy reset and allows overselling, so the issue will surface in normal maintenance workflows.
Impact:
Scarcity guarantees break; additional VIP/BACKSTAGE passes can be minted and sold, diluting existing holders.
Secondary-market prices and reputational trust suffer because the cap is no longer enforced.
The snippet below is taken from the Forge test test_PoC_SupplyCapBypass() and shows the minimum set of transactions required to reproduce the issue on-chain:
Alice purchases what should be the only VIP pass, so passSupply == 1.
The organiser calls configurePass() again; nothing in the UI indicates danger, yet the internal counter is flushed to zero.
Bob now buys another VIP pass even though the cap is still set to 1. The contract happily mints it because it believes no passes exist.
The fix must ensure the historical mint count is never lost once sales start. Two safe patterns:
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.