The Snowman NFT is the airdrop's reward asset. It is intended to be minted only by SnowmanAirdrop::claimSnowman, after the caller has proven a Merkle entitlement and staked (burned) their Snow tokens.
However, Snowman::mintSnowman is declared external with no access control â no onlyOwner, and no restriction to the airdrop contract:
Because the function is callable by anyone, the entire staking / Merkle-proof path is bypassable: any address can mint any number of reward NFTs to any recipient, for free, without ever holding Snow or appearing in the Merkle tree.
Likelihood: High â the function is permissionless and directly reachable by any externally-owned account; no special conditions are required.
Impact: High â the reward asset that the whole protocol is built to distribute can be minted arbitrarily by anyone, so the scarcity, fairness, and economic meaning of the airdrop are completely destroyed.
An attacker can mint the entire intended reward supply (and beyond) to themselves at will. Legitimate claimers gain nothing of value, and the airdrop's distribution guarantees are void.
The following Foundry test passes: an attacker with no Snow balance and no Merkle entitlement mints 5 Snowman NFTs by calling mintSnowman directly (it is not the airdrop contract).
Bind the minter to the airdrop contract at construction time (or make it onlyOwner), so only the authorized claim path can mint:
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.