In a secure ZK-claim system, the proof must be "non-malleable," meaning it should only be valid for a specific set of public inputs.
In this implementation, while the recipient is passed as a public input to the Noir circuit, it is not constrained by any logic inside the main function. In ZK terms, this is an "unconstrained" or "unused" public input. The cryptographic proof proves knowledge of the treasure secret, but it does not prove that the secret-holder intended for the funds to go to a specific recipient.
Likelihood: Critical
Automated bots can perform this attack in milliseconds.
No specialized cryptographic knowledge is required for the attacker; they only need to swap the recipient address in the transaction data.
Impact: High
Direct theft of the 10 ETH reward.
Legitimate hunters lose funds spent on gas and the reward itself.
The recipient (or msg.sender) must be cryptographically bound to the proof. This is typically done by hashing the secret and the recipient together, or by adding a constraint that ensures the proof is only valid if the recipient public input matches a value intended by the prover.
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.