SnowmanAirdrop.claimSnowman derives the claim amount from the recipient's live Snow balance and builds the merkle leaf from it:
The merkle tree commits to a specific (receiver, amount) snapshot, but the claim recomputes amount from whatever the recipient holds at claim time. Since Snow is a freely-transferable ERC20, anyone can send a pending recipient a tiny amount of Snow (even 1 wei), changing balanceOf(receiver) so the recomputed leaf no longer matches the committed one, and the claim reverts SA__InvalidProof.
The recipient can only restore eligibility by moving their balance back to the exact committed amount — which the attacker can undo by re-dusting. Front-running the claim with a 1-wei transfer blocks it indefinitely.
Likelihood: High
Anyone can transfer Snow to anyone; a single wei is enough and it can be repeated or front-run.
Impact: Medium
Recipients can be griefed out of their airdrop; any claim is DoS-able by an unrelated third party at negligible cost.
A griefer dusts alice with 1 Snow, and her otherwise-valid claim now reverts:
Commit the airdrop amount in the merkle leaf and use that committed value, instead of the recipient's live balance. Take amount as a claim parameter, verify keccak(receiver, amount) against the root, and require the recipient to stake exactly that committed amount:
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.