The normal behavior is that verifier updates keep claim() operational.
The issue is that updateVerifier() does not validate newVerifier != address(0). If owner sets zero verifier and later unpauses, claim() attempts to call verify on address zero and fails for all claims until verifier is changed again.
Likelihood:
Owner can call updateVerifier(address(0)) while paused; no guard prevents it.
Existing test demonstrates this assignment succeeds.
Impact:
Claim path can be unavailable after unpause due to invalid verifier target.
Protocol availability depends on a follow-up admin correction.
Written reproduction flow:
Owner pauses contract.
Owner sets verifier to address(0).
Owner unpauses.
Any user calling claim() hits failed external verifier call path and cannot claim.
Add a guard in updateVerifier(IVerifier newVerifier).
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.