Description
The configurePass
function is intended to initialize the price and maximum supply for predefined pass types (GENERAL_PASS
, VIP_PASS
, BACKSTAGE_PASS
). It also unconditionally resets the pass’s current supply to zero, regardless of whether the pass was already in use.
This behavior introduces a risk: once any number of passes have been minted, calling configurePass
again will reset the internal passSupply
to zero, potentially enabling over-minting, violating the configured maxSupply
, and breaking off-chain accounting assumptions.
The lack of initialization protection also makes it difficult to distinguish between an initial setup and a modification of an existing pass.
A better and safer design would be to split this into two clearly defined functions:
configurePass
: For initial setup only.
updatePass
: For future updates (price, max supply) without resetting current minted supply.
The issue will occur whenever the organizer calls configurePass
on a pass that has already been configured and minted.
There are no checks in place to prevent repeated calls or warn that a pass is already in use.
Over-minting becomes possible: if 50 passes have been minted, but passSupply
is reset to 0, up to maxSupply
more can be minted.
Off-chain systems that rely on accurate passSupply
values may be misled.
User trust could degrade due to apparent inconsistencies or unexpected pass duplication.
Explanation: This PoC shows how calling configurePass
again resets the internal supply counter, even though tokens have already been minted, allowing a total supply that exceeds the original cap.
Explanation: The fix introduces a one-time-only setup with configurePass
, and delegates future changes to updatePass
, which validates that changes do not violate already minted supply. This prevents unintentional resets and encourages safer administrative operations.
Step 1: Make configurePass
one-time-only
Step 2: Add updatePass
for controlled updates
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.