_isValidSignature
function in SnowmanAirdrop.sol
simply checks that the recovered signer equals the receiver
. However, since the same signature is valid for multiple calls (no nonce or expiry), a malicious relayer or attacker can front-run or replay a claim multiple times. Normal Behavior: Signatures should be valid only once per user, or scoped to specific nonces or contexts to avoid replay.
Issue: This contract accepts any signature signed by the receiver
with the correct hash, but doesn’t invalidate or differentiate them. If the receiver
signs a message once, it can be reused by others or replayed in other scenarios, even if already claimed.
Likelihood:
Reason 1: The function allows repeated use of the same ECDSA signature since there’s no claim nonce, expiry, or uniqueness enforcement.
Reason 2: Anyone who sees a valid claim tx (e.g., from mempool or logs) can copy it and front-run the original transaction.
Impact:
Impact 1: Unauthorized third parties can claim on behalf of a user without permission.
Impact 2: Users may lose their Snow tokens and corresponding NFTs permanently without realizing the claim was stolen.
Attacker sees the signature in mempool or log.
Attacker front-runs with exact same calldata.
Claim goes to attacker, tokens are staked, NFTs minted.
nonce
per receiver that is included in the signed message, and invalidate the signature after one use. 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.
The contest is complete and the rewards are being distributed.