Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Submit
ToolsExploitsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

FeedsContactPrivacy© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
rocq-cve-poc-21682 — CVE-2026-72703 — Rocq Guard Checker Accepts Non-Terminating Fixpoint via Unchecked Cross-Calls | Kitploit
Tools/GitHubGitHub/endrazine/rocq-cve-poc-21682
Static AnalysisVulnerability AnalysisExploitationCryptography
GitHubendrazine/rocq-cve-poc-21682

rocq-cve-poc-21682

CVE-2026-72703 — Rocq Guard Checker Accepts Non-Terminating Fixpoint via Unchecked Cross-Calls

View Repository
2 days agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

CVE-2026-72703 — Rocq Guard Checker Accepts Non-Terminating Fixpoint via Unchecked Cross-Calls

Proving 0 = 1 axiom-free via guard checker uniform parameter bypass.

Vulnerability Summary

The Rocq kernel's guard checker (fixpoint termination verifier) treats all parameters of a nested mutual fixpoint as uniform without examining calls between the fixpoint's bodies. The function find_uniform_parameters in kernel/inductive.ml only inspects self-recursive calls; when no body calls itself, every parameter is judged uniform. A parameter that grows through a cross-call can then keep an incorrect subterm specification, and a recursive call is accepted even though its argument is not structurally smaller.

This admits a non-terminating definition that proves False, from which any proposition follows — including 0 = 1.

The proof requires no axioms, tactics, plugins, or unsafe flags. Print Assumptions reports it as closed under the global context.

Usage

docker build -t rocq-cve-poc-21682 .
docker run --rm rocq-cve-poc-21682

On a vulnerable version (Rocq 8.20 – <9.2.0), the output confirms the proof of 0 = 1 with no axioms.

On a patched version (Rocq ≥9.2.0), the guard checker rejects the fixpoint.

Impact

Any system that relies on Rocq/Coq kernel-checked proofs may be affected if it runs on a vulnerable version without additional mitigation:

  • Formally verified compilers (CompCert)
  • Verified OS kernels (CertiKOS)
  • Separation logic frameworks (Iris)
  • Mathematical libraries (MathComp)
  • Proof-carrying code where a malicious .v file in a dependency could introduce unsound declarations
  • Verified smart contracts (ConCert)

Root Cause

find_uniform_parameters in kernel/inductive.ml only inspects self-recursive calls within each body of a mutual fixpoint. When no body contains a self-recursive call (all calls are cross-calls between bodies), every parameter is marked as uniform. A parameter that actually varies across cross-calls retains an incorrect subterm specification, allowing the guard checker to accept a recursive call on a non-structurally-decreasing argument.

Scoring

FieldValue
CVECVE-2026-72703
CVSS 3.1AV:L/AC:L/PR:N/UI:R/S:C/C:N/I:H/A:N — 7.1 (High)
CVSS 4.0AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N — 6.8 (Medium)
CWECWE-670 — Always-Incorrect Control Flow Implementation

Affected Versions

ProductAffectedFixed
Rocq Prover8.20 – <9.2.09.2.0

Mitigation

  • Upgrade to Rocq 9.2.0 or later.
  • Run coqchk on compiled .vo files as a defense-in-depth measure.

References

Bug reportrocq-prover/rocq#21682
Fixrocq-prover/rocq#21684
VulnCheck advisoryvulncheck.com

Timeline

DateEvent
2025Bug reported (rocq-prover/rocq#21682)
2025Fix merged (PR #21684) in Rocq 9.2.0
2026-08-24CVE-2026-72703 published by VulnCheck
2026-08-24Docker-reproducible PoC published

Credit

  • Bug discovery: Tristan Stérin, Claude Opus 4.6 (Anthropic)
  • Kernel fix: PR #21684
  • PoC packaging: Jonathan Brossard (@endrazine) — MOABI / PSIRT.com
Download Tool