The claim() function accepts an account parameter as the token recipient but never validates it against msg.sender. Any caller can trigger a claim on behalf of any eligible address.
Under normal behavior, each user should claim their own allocation. The account parameter should either be removed or validated.
The issue is that account is untrusted. Any external caller can pass any valid address and proof combination. The tokens go to the specified account, not to msg.sender.
Likelihood:
Reason 1 // Any external caller can invoke claim() with a valid proof and an eligible account parameter, regardless of who owns that account.
Reason 2 // If combined with a claim-tracking fix, this enables griefing where an attacker triggers a victim's claim, preventing the victim from claiming at a time of their own choosing.
Impact:
Impact 1 // Griefing: An attacker can front-run a legitimate user's claim, causing the victim to receive tokens at an unexpected time.
Impact 2 // With claim tracking added, a malicious actor can permanently lock a victim's allocation by claiming on their behalf.
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.