Vulnerable Contract: src/MerkleAirdrop.sol (line 30, function claim())
The MerkleAirdrop.claim() function accepts an account parameter that specifies the recipient of the airdrop tokens. The function does not verify that msg.sender == account, allowing any caller who possesses a valid Merkle proof to trigger a claim for any eligible address.
While tokens are correctly sent to account (not the caller), this enables front-running attacks where an attacker monitors the mempool, extracts claim parameters, and submits a competing transaction with higher gas.
Likelihood: Medium
Requires mempool monitoring or prior knowledge of valid Merkle proofs. Proofs eventually become public via Claimed events.
Impact: Low
Tokens always reach the intended recipient. No direct fund loss occurs. The attack griefs legitimate claimers by wasting their gas on reverted transactions (if hasClaimed guard from H01 is added).
Severity: Low
An address not included in the Merkle tree successfully calls claim() with collectorOne's address and valid proof. The tokens go to collectorOne, not the attacker, confirming that the access control check is missing.
Validate that the caller is the intended recipient, or implement EIP-712 signature verification for gasless relay support.
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.