A safe EIP-712 claim signature includes a deadline, a per-user nonce, or both. The signed struct here contains only (receiver, amount).
The signature is therefore valid for all time on this chain and on any future redeployment whose domain separator matches (same name="Snowman Airdrop", version="1", same chainId, same address — the last one limits it but is not future-proof).
Likelihood:
Reason 1: Users cannot revoke a signature once leaked, and rotating Snow approval to zero does not invalidate the EIP-712 message.
Reason 2: A v2 redeployment that reuses name and version produces an identical type/domain hash.
Impact:
Impact 1: Stretches C-03 to be permanent — no time-bound expiration.
Impact 2: Cross-deployment signature reuse if the team ever spins up a "Snowman Airdrop v1.0.1" without bumping version.
The PoC sets up Alice's claim signature in the present and then warps forward five years using Foundry's vm.warp. No matter how much time elapses, the signed payload's digest does not change because (receiver, amount) are time-independent. When the airdrop is finally called, the signature still verifies and the claim executes — proving the signed authorization has no temporal scope. The PoC's choice of five years is arbitrary; the same result holds for any time delta, including across multiple protocol redeployments if the domain separator collides.
The fix extends the EIP-712 struct with nonce and deadline fields, and tracks a per-user nonce in storage. The nonce makes every signature single-use even at the EIP-712 layer (independent of the C-03 fix), and the deadline gives users a way to bound their signed authorization in time. Both protections must be added together: a nonce alone allows indefinite replay until the user manually invalidates it; a deadline alone allows replay until the deadline. Together they reduce the signature's "blast radius" to a single claim within a bounded window.
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.