claimSnowman()
does not check whether a user has already claimed their reward before** **processing the claim leading to over-minting of tokens.The claimSnowman()
function is designed to allow eligible users to claim Snowman tokens once, by verifying their eligibility through a valid off-chain signature and a Merkle proof. After a successful claim, the contract should mark the user as having claimed to prevent multiple redemptions.
The function fails to check whether a user has already claimed their tokens before processing the claim. As a result, a user can replay the same valid signature and Merkle proof multiple times to repeatedly claim rewards.
Likelihood:
This occurs whenever a user holds the required i_snow
balance and has access to a valid signature and Merkle proof, they can repeatedly call claimSnowman()
using the same data.
Impact:
Users can bypass the one-time claim restriction, resulting in unauthorized multiple claims and over-minting of Snowman tokens.
The test bellow prove that someone can claim twice .
Before allowing a user to claim, the contract should check if they’ve already claimed. This is typically done using a mapping(address => bool)
to store whether each user has claimed.
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.