Normal behavior:
Only the intended recipient should be able to claim their allocation.
Issue:
The signature verification doesn't bind the receiver to the claim, allowing attackers to specify themselves as receivers while using a victim's signature.
Likelihood:
Medium: Requires signature interception
Easily automated with bot monitoring
Impact:
Complete theft of victim's allocation
Attacker receives victim's NFTs
No recourse for legitimate users
Explanation:
Victim signs message containing their address and balance
Attacker calls claimSnowman() with:
receiver = attacker
Victim's signature
Valid Merkle proof
Contract verifies victim signed their own balance
But mints NFTs to attacker instead of victim
Explanation:
Enforce strict signature binding:
Require signer matches the receiver parameter
Add explicit non-zero address check
Prevent address substitution attacks
Maintain EIP-712 compliance for security
This issue represents a critical security vulnerability because it enables unauthorized users to redirect NFT claims meant for others. If exploited, it would result in the permanent theft of NFT rewards and the loss of user trust in the protocol. Since attackers can automate this by observing the mempool, the vulnerability is actively exploitable in real-time. Binding the signer to the recipient is fundamental to secure claim validation in signature-based systems.
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.