claim() allows any caller to submit a claim for any eligible address. Anyone with a valid proof can front-run claims and drain funds.
In MerkleAirdrop.sol:30, claim takes account as a parameter, not msg.sender:
The Merkle proof validates account, not msg.sender. Proofs are deterministic from the tree inputs, so anyone who knows them can construct valid proofs. Combined with no double-claim protection, an attacker can: (1) watch mempool for claim txs, extract proofs, (2) call claim repeatedly for all eligible addresses, draining the entire balance.
HIGH — Once a single claim tx enters the mempool, its proof is public. An attacker extracts it, replays for all addresses, and drains the airdrop combined with the no-double-claim bug.
Require msg.sender == account or use EIP-712 signature-based claiming.
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.