_isValidSignature should recover the signer's address from the signature and verify it matches the receiver address to prevent unauthorized claims.Specific Issue: The contract calls ECDSA.tryRecover but ignores its return value. It does not compare the recovered address with the intended receiver, effectively allowing any signature (or even an invalid one) to pass if the function logic doesn't explicitly return false.
Likelihood: High. Any user can provide a random signature and potentially bypass the security check.
Impact: High. Attackers can claim Snowman NFTs belonging to other users or mint NFTs without valid authorization.
An attacker calls claimSnowman for a legitimate receiver address.
The attacker provides dummy values for v, r, s.
Because _isValidSignature does not validate the actualSigner against the receiver, the check succeeds.
The attacker successfully steals the airdrop.
Recommended Mitigation
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.