CVE-2026-72705

Rocq Prover before 9.2.0 Guard Checker Accepts Fixpoint Passed as a Higher-Order Argument

State
Published
Severity
6.8 Medium
Published
Aug 24, 2026
Updated
Oct 26, 2026
Reserved
Aug 10, 2026

Read the record on cve.org

Description

The guard checker in Rocq Prover does not follow recursive calls made through a fixpoint's own arguments. A fixpoint may pass itself as a higher-order argument to a second fixpoint, which then applies it to a value that is not a subterm of the structural argument. Passing the recursive function to a plain definition is rejected because the checker unfolds the definition and observes the call, but passing it to a fixpoint is accepted because higher-order recursive calls through fixpoint arguments are not tracked. This admits a type that is definitionally equal to its own negation, so self-application produces False in purely definitional code, without tactics, axioms, plugins or unsafe flags, and Print Assumptions reports the result as closed under the global context. Fixed in Rocq 9.2.0.

Scores

CVSSScoreVectorSource
4.06.8 MediumCVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:H/VA:N/SC:N/SI:N/SA:NVulnCheck
3.16.3 MediumCVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:N/I:H/A:NVulnCheck

Weaknesses

  • CWE-670 Always-Incorrect Control Flow Implementation

Affected Products

ProductVersions
rocqrocq-prover
  • before 9.2.0Affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.