Normal behavior: Each treasure is uniquely identified by its hash and can be claimed only once. The contract should prevent duplicate claims and preserve reward invariants across claims.
The issue is that the contract uses a single immutable _treasureHash for all treasures instead of mapping each valid treasure hash. This causes any valid proof for _treasureHash to permit repeated claims against the same stored key, breaking the uniqueness invariant.
Likelihood:
Occurs whenever multiple valid treasures exist but only one is recognized in state.
Appears during normal claim() flows when proofs correspond to distinct treasure secrets but match the same _treasureHash.
Impact:
Attackers may forge repeated claims using different valid proofs but identical public hash binding.
Allows extractor to drain ETH rewards for all MAX_TREASURES or more.
Track each valid treasure hash separately using the mapping and use that key to prevent duplicates.
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.