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 が構造引数の非部分項に対して自身を呼び出すような fixpoint を受け入れます。再帰関数を Definition(fixpoint ではない定数)に渡すことは正しく拒否されます — ガードチェッカーはそれを展開し、問題のある呼び出しを検出します。しかし、Fixpoint に渡す場合は誤って受け入れられます。

これにより、4 行でラッセル流のパラドックスが生じます:

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

ここで russell 1 は定義上 russell 1 -> False と等しく、これは自身の否定となる型である。自己適用により直接 False が得られる。

このエクスプロイトは:

  • 公理、プラグイン、unsafe 機能を一切使用しない
  • 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 を拒否すべきです。なぜなら、russell は自身を高階引数として iterate_to_neg に渡し、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 *)

発見

このバグは、Tristan Stérin (@tcosmo) がセットアップした夜間のファジング実行中に、Claude Opus 4.6 によって自律的に発見されたもので、ガードチェッカーに関する Yannick Forster (@yforster) からのヒントに基づいています。AI は高階不動点バイパスパターンを特定し、最小限の iterate_to_neg/russell エクスプロイトを構築しました。

参照: Zulip thread

クレジット

  • バグ発見: Claude Opus 4.6 (Anthropic)、セットアップは Tristan Stérin (@tcosmo)
  • カーネル修正: PR #21684
  • PoC パッケージング: Jonathan Brossard (@endrazine)
ツールをダウンロード