The SnowmanAirdrop
contract's signature mechanism lacks critical replay protection fields. The SnowmanClaim
struct only contains address receiver
and uint256 amount
, missing both a nonce
field for preventing signature reuse and a deadline
field for signature expiration. This creates a scenario where signatures remain valid indefinitely and can potentially be replayed under specific circumstances.
User signs a message containing only their address and token amount, with no nonce or expiration time
The signature remains cryptographically valid forever, as there's no deadline field to enforce expiration
Anyone can re-use the signature to claim more NFTs than intended
Signatures remain valid indefinitely with no expiration mechanism
Risk of signature replay
Update the signature structure to include replay protection mechanisms:
Update getMessageHash()
accordingly:
Update the MESSAGE_TYPEHASH
accordingly:
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.