The SnowmanAirdrop::claimSnowman
function lacks replay protection for ECDSA signatures and fails to verify claim status before processing. This allows attackers to:
Reuse valid signatures indefinitely
Claim NFTs multiple times per address
Mint unlimited NFTs without token ownership
Combined with dynamic balance checks, this enables infinite NFT inflation attacks.
Infinite NFT Supply: Attackers can mint arbitrary Snowman NFTs
Economic Collapse: NFT value drops to zero due to hyperinflation
Token Theft: Users' SNOW tokens drained via repeated claims
Protocol Failure: Core airdrop mechanism becomes unusable
Likelihood:
• Exploit requires basic Ethereum knowledge
• No special privileges needed
• Attack cost: <0.05 ETH
Impact:
• Permanent destruction of NFT value
• Protocol tokenomics rendered useless
• Loss of user funds
Attack Flow:
Victim has 100 SNOW tokens and valid Merkle proof
Attacker calls drain() with victim's signature
Attack loop:
Claim → Mint NFTs → Return tokens → Reclaim
Result: Unlimited NFTs minted per signature
Signature Tracking:
Nonced Messages:
Include nonce and block.chainid in signed digest
Snapshot Amounts:
Replace dynamic balances with Merkle-fixed amounts
Claim Status Verification:
The claim function of the Snowman Airdrop contract doesn't check that a recipient has already claimed a Snowman. This poses no significant risk as is as farming period must have been long concluded before snapshot, creation of merkle script, and finally claiming.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
View preliminary resultsAppeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.