The claimFor
function lacks a nonce or any other replay protection. A captured signature can be reused indefinitely, allowing an attacker to steal a user's airdrop by replaying a legitimate claim transaction they observed in the mempool.
The claimFor
function validates a signature but never invalidates it after use. An attacker can front-run a legitimate transaction, copy the signature, and submit it themselves. Because the signature remains valid, the attacker's transaction will succeed, stealing the claim.
Likelihood:
Any claimFor
transaction submitted to a public mempool is vulnerable to being front-run.
The lack of a nonce is a fundamental flaw in the signature verification logic, making every claimFor
call vulnerable.
Impact:
A user's entire airdrop can be stolen by an attacker who replays their signature.
Attackers can steal airdrops, rendering the claimFor
feature completely insecure and breaking user trust.
A legitimate user, Alice, provides a signature to Bob to claim on her behalf. An attacker, Eve, sees Bob's transaction in the mempool, copies the signature, and submits an identical transaction with a higher gas fee. Eve's transaction gets mined first, and the claim is processed. Bob's subsequent transaction will fail.
Implement EIP-712 and include a nonce in the signed hash. The nonce must be stored and incremented on-chain for each user upon a successful claim, making each signature single-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.