The circuit accepts recipient as a public input, but never uses it in any constraint.
As a result, the proof is not bound to the payout address, allowing the same valid proof to be submitted with a different recipient .
Likelihood:
Any valid claim transaction exposes the proof and public inputs on-chain.
Because recipient is not constrained by the circuit, an attacker can reuse the same proof and treasureHash while replacing recipientwith their recipient's address.
Impact:
An attacker can front-run or replay a valid proof and redirect the reward to themselves.
This breaks the intended replay protection described by the protocol and can result in loss of the legitimate finder’s reward.
The PoC deploys the verifier and TreasureHunt contract with 100 ether, then loads a valid proof, treasureHash, and original recipient from the generated fixtures. An attacker submits the same proof and treasureHash, but replaces the recipient with their own address; the claim succeeds and the reward is paid to the attacker.
Bind the recipient to the proof by using it in a circuit constraint. For example, include recipient in the hashed statement that the proof verifies
The key requirement is that recipient must affect at least one circuit constraint. Merely declaring it as a public input is not enough.
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.