Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-72705

CVE-2026-72705: Rocq Prover Guard Checker Vulnerability

CVE-2026-72705 is a guard checker flaw in Rocq Prover that allows fixpoints to bypass recursive call tracking through higher-order arguments, enabling type inconsistencies. This post explains its impact, affected versions, and mitigation steps.

Published:

CVE-2026-72705 Overview

CVE-2026-72705 is a soundness flaw in the Rocq Prover guard checker, the component that validates termination of recursive fixpoint definitions. The checker fails to follow recursive calls that pass through a fixpoint's own arguments. An attacker-authored proof can pass a fixpoint as a higher-order argument to a second fixpoint, which then applies it to a value that is not a structural subterm. The result is a type that is definitionally equal to its own negation, allowing derivation of False in purely definitional code. Print Assumptions reports the proof as closed under the global context, so users have no signal that trust has been broken. The issue is fixed in Rocq 9.2.0.

Critical Impact

Attackers can construct proofs of False without tactics, axioms, plugins, or unsafe flags, breaking the logical consistency of any development that consumes an affected library.

Affected Products

  • Rocq Prover versions prior to 9.2.0
  • Coq releases sharing the same guard-checker implementation
  • Downstream libraries and verified projects that depend on vulnerable Rocq versions

Discovery Timeline

  • 2026-08-24 - CVE-2026-72705 published to NVD
  • 2026-08-26 - Last updated in NVD database
  • Rocq 9.2.0 - Fix released in the Rocq Prover repository

Technical Details for CVE-2026-72705

Vulnerability Analysis

The Rocq Prover guard checker enforces structural recursion by requiring that every recursive call operates on a syntactic subterm of the decreasing argument. This check is what makes the underlying calculus strongly normalizing and, therefore, logically consistent. The vulnerability, categorized under [CWE-670] (Always-Incorrect Control Flow Implementation), stems from an incomplete traversal in that checker. When a fixpoint passes itself as a higher-order argument to a second fixpoint, the checker does not propagate the guard obligation into the second fixpoint's body. The inner fixpoint can then apply the received function to any value, bypassing the subterm requirement entirely.

Because the resulting recursion is not actually terminating, definitional equality collapses. A user can define an inductive type that is definitionally equal to its own negation and derive False from it. The proof term is well typed under the affected kernel and self-applies without invoking tactics, Axiom, plugins, or the -unsafe family of flags.

Root Cause

The guard checker unfolds plain definitions and observes the enclosed recursive call, which is why passing a fixpoint to a Definition is correctly rejected. It does not perform the equivalent analysis when the receiving construct is another Fixpoint. Higher-order recursive calls routed through fixpoint parameters escape the guard analysis, admitting non-terminating recursion that the kernel treats as total.

Attack Vector

Exploitation requires local user interaction: a developer must compile Rocq source that contains the crafted definitions. An attacker publishes a library or proof file that appears benign, exports a lemma of type False, and any downstream development that imports it inherits an inconsistent context. From False, arbitrary propositions are provable, which invalidates verification claims for any project that links the poisoned module. Refer to the GitHub proof-of-concept for issue 21683 and the Rocq issue tracker entry for the exact term construction.

Detection Methods for CVE-2026-72705

Indicators of Compromise

  • Rocq source files containing a Fixpoint that accepts another fixpoint as a higher-order argument and applies it to a non-subterm value.
  • Proof developments that close a goal of type False without any entries in Print Assumptions.
  • Third-party libraries pinned to Rocq or Coq versions below 9.2.0 in dune-project, opam, or CI configuration files.

Detection Strategies

  • Run rocq --version or coqc --version across build agents and developer machines to inventory installations below 9.2.0.
  • Grep proof repositories for Fixpoint definitions whose parameters have function types returning the same inductive family, then review the applied arguments manually.
  • Re-check critical proofs with Rocq 9.2.0 and treat any regression from Qed to a guard-checker rejection as a soundness signal.

Monitoring Recommendations

  • Track the Rocq Prover repository and the VulnCheck advisory for follow-up fixes.
  • Alert on new opam or dune dependencies that pin Rocq or Coq to pre-9.2.0 releases.
  • Monitor CI pipelines for proofs whose Print Assumptions output changes unexpectedly between builds.

How to Mitigate CVE-2026-72705

Immediate Actions Required

  • Upgrade all Rocq Prover installations to version 9.2.0 or later.
  • Rebuild and re-verify every downstream proof development against the patched kernel and fail the build on any newly rejected Fixpoint.
  • Audit third-party proof libraries introduced since the affected versions shipped, giving priority to those exporting lemmas of type False or ~ P.

Patch Information

The fix landed in Rocq 9.2.0 through pull request 21684, which extends the guard checker to follow higher-order recursive calls routed through fixpoint arguments. Details on the underlying defect are tracked in issue 21683.

Workarounds

  • Pin project toolchains to Rocq 9.2.0 or later in opam and dune-project and reject builds against earlier releases.
  • Restrict use of higher-order Fixpoint parameters in shared libraries until every consumer has upgraded.
  • Review and re-verify any proof that closes a negative goal without listed assumptions before trusting it in production.

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.