Normal behavior:
Each Merkle leaf in an airdrop claim system should be consumable only once. This ensures that the same proof cannot be reused by the same or different address to claim additional NFTs.
Issue:
The contract only checks whether an address has claimed (s_hasClaimedSnowman[receiver]) but fails to track which Merkle leaves have been used. As a result, an attacker can reuse the same valid Merkle proof multiple times to mint excessive NFTs, exploiting the protocol’s reward allocation.
multiple times and continue minting NFTs, as long as their address matches. This completely breaks the airdrop mechanism.
Likelihood:
High — Attack is simple and requires only one valid Merkle proof.
Reproducibility: Fully reproducible using repeated calls with the same arguments.
Ease of exploitation: Very easy with basic scripting; no technical barriers once one valid proof is known.
Impact:
Unlimited NFT minting from a single valid proof.
Total collapse of airdrop fairness and reward limits.
Severe inflation: Rewards vastly exceed intended supply.
Protocol integrity failure: Trust in reward distribution is broken.
Explanation:
Attacker uses a valid Merkle proof multiple times to mint NFTs.
Since leaf reuse is not tracked, claimSnowman() allows it.
Protocol cannot prevent repeated exploitation without leaf status tracking.
Track used Merkle leaves in a mapping and check for duplication prior to minting. This ensures that each allocation can only be claimed once.
Explanation:
Solution: Prevent duplicate claims by marking each Merkle leaf as used upon first claim.
Security: Guarantees that each allocation is redeemable exactly once.
Efficiency: One cold SLOAD + one SSTORE per claim (standard for Merkle airdrops).
Compatibility: No breaking changes; complements existing address-based claim checks.
This is a critical vulnerability due to the ease of exploit and direct inflation of token rewards. Without unique Merkle leaf enforcement, attackers can bypass the entire distribution cap and flood the ecosystem with illegitimate NFTs.
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.