Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
rocq-cve-poc-21683 — CVE-2026-72705 — Rocq Guard Checker 接受作为高阶参数传入的 Fixpoint | Kitploit
工具/GitHubGitHub/endrazine/rocq-cve-poc-21683
漏洞分析漏洞利用密码学论文与研究
GitHubendrazine/rocq-cve-poc-21683

rocq-cve-poc-21683

CVE-2026-72705 — Rocq Guard Checker 接受作为高阶参数传入的 Fixpoint

查看仓库
2天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-72705 — Rocq 守卫检查器接受作为高阶参数传递的 Fixpoint

通过守卫检查器的 fixpoint 绕过,借助罗素悖论无公理地证明 0 = 1。

由 Claude Opus 4.6(Anthropic)自主发现。

字段值
缺陷报告rocq-prover/rocq#21683
修复PR #21684
受影响Rocq ≤ 9.1.0 / 所有带守卫检查器的 Coq 版本
修复于9.2.0
CVSS 3.1AV:L/AC:L/PR:N/UI:R/S:C/C:N/I:H/A:N — 7.1
CWECWE-670(始终错误的控制流实现)
CVECVE-2026-72705

漏洞摘要

守卫检查器接受这样的 fixpoint:它们将自身作为高阶参数传递给另一个 fixpoint,而后者随后在结构参数的非子项上调用它们。将递归函数传递给 Definition(非 fixpoint 常量)会被正确拒绝——守卫检查器会展开它并看到有问题的调用。但将其传递给 Fixpoint 则会被错误地接受。

这就在 4 行代码中制造了一个罗素式悖论:

Definition delta (x : russell 1) : False := x x.
Definition omega : False := delta delta.

其中 russell 1 在定义上等于 russell 1 -> False——一个类型是其自身的否定。自应用直接得到 False。

该漏洞利用:

  • 不使用任何公理、插件或不安全特性
  • Print Assumptions 报告 “Closed under the global context”
  • 对 False 的整个证明仅需 4 行函数式代码
  • 无策略,无 Qed——纯定义式

用法

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

影响

任何信任 Rocq 内核检查证明的系统都会受到影响:

  • 形式化验证软件:CompCert、CertiKOS、Iris、MathComp
  • 智能合约:ConCert、经过验证的 DeFi
  • AI 生成的证明:任何将 Rocq 用作可信后端的系统

技术细节

悖论构造

iterate_to_neg f n seed :=
  match n with
  | 0   => f seed -> False      (* negate after n steps *)
  | S m => iterate_to_neg f m seed
  end

russell n :=
  match n with
  | 0   => True
  | S m => iterate_to_neg russell 1 (S m)   (* passes ITSELF *)
  end

守卫检查器应当拒绝 russell,因为它将自身作为高阶参数传递给 iterate_to_neg,而后者随后会在 S m(不是 n 的子项)上调用它。但该检查器只跟踪直接递归调用,而不跟踪通过高阶不动点参数进行的调用。

归约

russell 1 = iterate_to_neg russell 1 1
          = iterate_to_neg russell 0 1
          = russell 1 -> False

因此 russell 1 ≡ russell 1 -> False。这就是经典的罗素集:所有不包含自身的集合所构成的集合。自应用得到:

delta : russell 1 -> False    (* russell 1 = russell 1 -> False *)
delta x := x x                (* x : russell 1 = russell 1 -> False *)

omega : False
omega := delta delta           (* delta : russell 1 -> False = russell 1 *)

发现

该漏洞是由 Claude Opus 4.6 在一次夜间模糊测试运行中自主发现的,该测试由 Tristan Stérin(@tcosmo)搭建,基于 Yannick Forster(@yforster)关于守卫检查器的提示。该 AI 识别出了高阶不动点绕过模式,并构造了最小的 iterate_to_neg/russell 漏洞利用。

参见:Zulip 讨论串

致谢

  • 漏洞发现:Claude Opus 4.6(Anthropic),由 Tristan Stérin(@tcosmo)搭建环境
  • 内核修复:PR #21684
  • PoC 打包:Jonathan Brossard(@endrazine)
下载工具