MerkleAirdrop::claim()
no record kept of whether the user has already claimed their airdrop, which allows the user to claim multiple times until emptying the contract.Description: A user could preempt others by either paying more gas or through MEV and interacting with the contract N number of times until emptying it, before other users can make the claim.
Impact: Can steal money from other users.
Proof of Concept:
User claim first time your airdrop
The user can call the MerkleAirdrop::claim()
function again
Repeat step 2 N times
This test was added in MerkleAirdrop.t.test
Recommended Mitigation: To prevent this scenario, you should keep track of the proofs already consumed. You could do this with a mapping address => bool that stores the state of the user address and is validated in the claim()
function.
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.