The constructor correctly guards against a zero-address verifier using the InvalidVerifier error. However, updateVerifier() has no equivalent check, allowing the owner to set the verifier to address(0) — either accidentally or maliciously. Once set, all future claim() calls will silently fail verification and revert with InvalidProof, permanently locking participants out.
Likelihood:
Requires owner action, accidental mis-paste or wrong address during verifier upgrade
Owner is trusted but human error is realistic during contract maintenance
Impact:
All future claim() calls revert InvalidProof — participants permanently locked out
ETH remains in contract, recoverable by owner via emergency Withdraw(), but hunt is effectively dead
InvalidVerifier error is already defined in the contract but unused in this function, clear oversight
The hunt.updateVerifier() function is missing an address(0) check.
The issue is that `updateVerifier()` allows the owner to replace the verifier with an arbitrary address, including `address(0)`, even though the constructor explicitly treats a zero verifier as invalid and reverts with `InvalidVerifier()` during initial deployment. In other words, the contract establishes at deployment time that a null verifier address is not an acceptable configuration, but then fails to preserve that same invariant when the verifier is later updated through the admin recovery path.
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.