Snowman Merkle Airdrop

AI First Flight #10
Beginner FriendlyFoundrySolidityNFT
EXP
View results
Submission Details
Impact: medium
Likelihood: medium
Invalid

No nonce in signed message

Root cause

Signed claims do not include a nonce or per-signer counter, enabling replay of signatures across contexts or repeated use when other checks allow it.

bytes32 private constant MESSAGE_TYPEHASH =
keccak256("SnowmanClaim(addres receiver, uint256 amount)");
function claimSnowman(
address receiver,
bytes32[] calldata merkleProof,
uint8 v,
bytes32 r,
bytes32 s
) external nonReentrant {
//...
}

Impact

Transaction can be replayed by the same signed message by attacker.

Likelihood

likely to be exploitable if signatures are reused.

Mitigation

Add a per-signer mapping(address => uint256) nonces and include nonce in the signed struct; increment the nonce when a claim is consumed and verify it in claimSnowman.

Updates

Lead Judging Commences

ai-first-flight-judge Lead Judge 2 days ago
Submission Judgement Published
Invalidated
Reason: Incorrect statement

Support

FAQs

Can't find an answer? Chat with us on Discord, Twitter or Linkedin.

Give us feedback!