The claim() function accepts an arbitrary account address parameter with no verification that msg.sender == account or that the account holder has signed the transaction.
Any third party can trigger a claim for any eligible address.
Likelihood:
The Merkle proof for each address is derivable from the public makeMerkle.js script and on-chain Merkle root
Any attacker can front-run all 4 legitimate claimants at contract deployment
Impact:
Attacker forces all 4 claims before legitimate users can act, paying only 4 × 1e9 wei (negligible)
Once fixed with H-1's hasClaimed mapping, legitimate users are permanently locked out of ever claiming
Users lose all agency over when and whether to receive their airdrop
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.