The claim() function should mark each treasure as claimed only once.
But it checks claimed[_treasureHash] (always 0x0) instead of claimed[treasureHash] (the parameter), allowing repeated claims.
Likelihood:
An attacker with a valid proof can call claim() repeatedly with the same proof and treasureHash.
Each call succeeds because the duplicate check compares against the wrong key.
Impact:
Attacker can drain entire contract balance (100 ETH with 10 claims of 10 ETH each).
Contract cannot prevent legitimate users from claiming after funds are depleted.
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.
The contest is complete and the rewards are being distributed.