Describe the normal behavior in one or more sentences
The claimSnowman() function should ensure each eligible user can only claim their airdrop once by verifying they haven't received tokens before.
Explain the specific issue or problem in one or more sentences
The function uses strict equality (== 0) to check if a user has already claimed. An attacker can manipulate this by receiving a dust amount of tokens (even 1 wei) from another source, making their balance non-zero and allowing them to claim again after transferring away their tokens.
Likelihood:
Reason 1: Any user can receive a dust amount of Snowman tokens from any source (DEX, friend, airdrop) either accidentally or intentionally. Once received, they can transfer away all tokens and claim again, repeating indefinitely.
Reason 2: The attack is trivial to execute and requires no special privileges. Users can even send themselves dust amounts from multiple addresses to enable multiple claims for different eligible addresses they control.
Impact:
Impact 1: Airdrop fund drainage - Eligible users can claim multiple times by manipulating their token balance, draining the airdrop allocation meant for other users.
Impact 2: Unfair distribution - Some users receive multiple allocations while others may receive none if the airdrop funds are exhausted. Breaks the intended fair distribution mechanism.
The contest is live. Earn rewards by submitting a finding.
Submissions are being reviewed by our AI judge. Results will be available in a few minutes.
View all submissionsThe contest is complete and the rewards are being distributed.