SnowmanAirdrop::claimSnowman()
Uses Current Token Balance For Merkle Proof Making It Susceptible to DoSIn the normal case, users would earn Snow tokens through the Snow contract and would not have their balances changed after the farming phase. The current amount
of Snow tokens a user would have when calling claimSnowman()
would be the same as the amount
that was used to generate the merkle tree.
However this would also make the function susceptible to DoS attacks as bad actors can manually transfer tokens after the farming phase to cause a mismatch between current amount
and the amount
used to generate the merkle tree, causing merkle proof to fail.
Likelihood: High
It would be very simple for attackers to transfer ERC20 tokens manually if they want to cause a DoS to a particular address.
Impact: Medium
Users may not understand why their claims are failing, but it could also be solved by manually transferring excess tokens out of their wallets so that their balance aligns with the original balance.
The following test case shows how alice is no longer able to claim once bob transfers additional Snow tokens to her.
The function should accept an additional variable for users to input how much tokens they own, which should correspond to the amount used to build the merkle tree with. The drawback of this is that users would need to track how many tokens they own at the end of the farming phase and before the airdrop.
Claims use snow balance of receiver to compute the merkle leaf, making proofs invalid if the user’s balance changes (e.g., via transfers). Attackers can manipulate balances or frontrun claims to match eligible amounts, disrupting the airdrop.
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.