The snowmanAirdrop
contract is designed to let eligible users claim a Snowman NFT by verifying a Merkle proof and signing a message. The intent is that each user can only claim once using their i_snow
token balance.
The contract does not implement any mechanism to prevent duplicate claims by the same user. While the contract tracks whether an address has already claimed using the s_hasClaimedSnowman
mapping, it fails to check this mapping in the claimSnowman
function. As a result, a user can repeatedly call the claimSnowman()
function and claim multiple NFTs, potentially draining the airdrop pool.
Likelihood: High
Any user who is part of the Merkle tree and has a valid signature can repeatedly call the function.
No additional constraints are enforced by the contract to prevent repeated use.
Impact: High
Repeated claims allow an attacker to mint unlimited NFTs using the same balance.
The total airdrop supply can be drained by a single malicious or unaware user
Assume the receiver has 1000
SNOW tokens and a valid Merkle proof and signature.
CopyEdit
Add a check to ensure a user can only claim once, using the s_hasClaimedSnowman
mapping that's already being written to.
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.
Appeals are being carefully reviewed by our judges.