The SnowmanAirdrop::_isValidSignature
function is vulnerable to ECDSA signature malleability attacks due to:
Lack of s-value range validation
Absence of signature tracking
Use of non-standard signature recovery
This allows attackers to transform a single valid signature into a second valid signature for the same message. When combined with the claim process, this enables double NFT claims from one authorization.
Double NFT Minting: Single user authorization mints NFTs twice
Protocol Inflation: Unauthorized 2x increase in NFT supply
Theft of Value: Dilutes NFT value for legitimate holders
Fundamental Trust Breakdown: Undermines cryptographic security guarantees
Likelihood:
• All ECDSA signatures inherently malleable
• Requires only signature observation (public mempool)
• Exploitable with basic cryptographic knowledge
Impact:
• Permanent 2x supply inflation per claim
• Direct financial loss to protocol
• Cascading devaluation of NFTs
Scenario: Balance Change Breaking Legitimate Claims
Alice holds 100 SNOW tokens
Signs claim message → Digest1 = hash(receiver, 100)
Transfers 50 tokens to Bob
Attempts claim:
Result: Legitimate claim fails despite prior authorization
Scenario: Signature Replay via Balance Reset
Alice holds 100 SNOW → Signs message
Claims NFTs → Tokens staked
Buys 100 more SNOW
Reuses same signature → Claim succeeds again
Result: Double NFT minting from one authorization
Fixed getMessageHash:
Fixed _isValidSignature:
The claim function of the Snowman Airdrop contract doesn't check that a recipient has already claimed a Snowman. This poses no significant risk as is as farming period must have been long concluded before snapshot, creation of merkle script, and finally claiming.
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.