Normally, each user should only be able to claim the Snowman NFT airdrop once; the contract should prevent multiple claims.
However, the current claimSnowman
function only sets s_hasClaimedSnowman[receiver] = true;
when claiming, but does not check this mapping at the beginning of the function. This allows the same address to successfully claim the NFT multiple times.
Likelihood: High
Any user will succeed every time they call claimSnowman, because the mapping is not checked
As long as the contract has resources, an attacker can claim repeatedly
Impact: High
Airdrop resources are abused, NFTs or tokens can be claimed multiple times
Causes economic loss and damages project reputation
Just calls the claimSnowman
twice, observe mint snowman 2 times
Use s_hasClaimedSnowman
check if the receiver already claim their NFT
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.