claimSnowman sets s_hasClaimedSnowman but never checks it, and the signature has no nonce or expiry, so a user can claim more than their allocation and anyone can replay an old signature to force a claim.
After a claim, the contract sets a flag to mark that the user has already claimed.
The problem is that the flag is only written and never checked. A user can accumulate the same Snow amount they already claimed, and receive NFTs again, beyond their allocation.
In addition, the signature has no nonce and no expiry date. The same old signature remains valid, so anyone can reuse it to call claimSnowman for the user and make the contract take the user's Snow tokens.
Likelihood: Low. The user's balance has to return to exactly the originally allocated amount.
Impact: Medium. A user can receive more NFTs than their allocation, and anyone can replay an old signature to take a user's Snow without their consent.
Alice claims once. Then her balance returns to the same amount, and an attacker replays her old signature.
Check the claim flag before claiming, and add a nonce and deadline to the signed message.
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.