Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
KVM-Januscape — CVE-2026-53359脆弱性パッチ | Kitploit
ツール/GitHubGitHub/xj2268-ta/kvm-januscape
脆弱性分析エクスプロイトバイナリ解析
GitHubxj2268-ta/kvm-januscape

KVM-Januscape

CVE-2026-53359脆弱性パッチ

リポジトリを見る
21ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

KVM-XJ ホットパッチ

dump_tool.py はオフセットを自動検索するためのものです。使い方はコードを見てください。

脆弱性概要

CVE-2026-53359(Januscape)は、Linux カーネル KVM シャドウ MMU における Use-After-Free(UAF)脆弱性です。

  • 潜伏期間:16 年(2010年8月~2026年7月)
  • 影響範囲:ネステッド仮想化を有効にしたすべての Intel/AMD x86 システム
  • 危険度:高、VM 内の root ユーザーがホストに脱出し、ホストの root 権限を取得可能
  • 攻撃方法:ホストのカーネルパニック(DoS)または完全な仮想マシン脱出(公開 PoC なし)

脆弱性の原理

kvm_mmu_get_page() 関数は、ハッシュテーブル内で再利用可能なシャドウページテーブルを検索する際、gfn(ゲスト物理ページフレーム番号)のみを比較し、role(ページテーブルロール / MMU ロール)を比較しませんでした。そのため、ロールが一致しないページテーブルが誤って再利用され、UAF が発生します。

root@kitploit:~
修正前(脆弱):
┌──────────────────────────────────────┐
│ kvm_mmu_get_page()                   │
│   ハッシュテーブルを走査              │
│   if (child->gfn == gfn)             │
│       return child  ← gfnのみ比較!   │
│       ロール不一致でも再利用 → UAF!    │
│   新しいページを割り当て(安全)       │
└──────────────────────────────────────┘

上流カーネルのコミット 81ccda30b4e8 でロール比較が1行追加されました:

root@kitploit:~
// 修正前
if (... && spte_to_child_sp(*sptep)->gfn == gfn)

// 修正後
if (... && spte_to_child_sp(*sptep)->gfn == gfn
       && spte_to_child_sp(*sptep)->role.word == role.word)

私の修正方法

方法:text_poke バイナリホットパッチ(NOP パッチ)

カーネルソースを変更せず、関数を置き換えず、実行中のカーネルメモリ上で脆弱性の命令を直接修正します。

原理

root@kitploit:~
バイナリレベル:
オフセット 0x104: 49 39 47 28          cmp %rax, 0x28(%r15)   ← gfn 比較
オフセット 0x108: 0f 84 9f 01 00 00    je   +0x19f            ← 一致すればジャンプして再利用

パッチ適用後:
オフセット 0x108: 66 0f 1f 44 00 00    NOP × 6               ← 何もしない
root@kitploit:~
修正後:
┌──────────────────────────────────────┐
│ kvm_mmu_get_page()                   │
│   ハッシュテーブルを走査              │
│   if (child->gfn == gfn)             │
│       NOP(ジャンプが消去され、スルー)│
│   新しいページを割り当て(強制的に安全経路)│
│   → 再利用しない = UAF を誘発しない = 脆弱性修正 │
└──────────────────────────────────────┘

技術的実装

  1. kallsyms_lookup_name で kvm_mmu_get_page 関数のアドレスを取得
  2. kallsyms_lookup_name で text_poke 関数(カーネルコードのホット修正 API)のアドレスを取得
  3. stop_machine ですべての CPU を停止し、修正の安全性を確保
  4. text_poke で 6 バイトの je 命令を 6 バイトの NOP に置き換え
  5. アンロード時に text_poke で元の命令を復元

他の方式を使わない理由

方式問題点

影響評価

導入要件

条件説明
カーネルバージョンLinux 4.18+(CentOS 8 / RHEL 8 / Rocky 8 など)
コンパイル環境kernel-devel + gcc + make
ホストの再起動不要
VM の停止

コンパイルとロード

root@kitploit:~
# コンパイル
make

# ホットパッチのロード
insmod KVM-XJ.ko

# 状態の確認
dmesg | grep KVM-XJ
cat /sys/module/kvm_intel/parameters/nested   # 1 のはず
lsmod | grep KVM_XJ

# アンロード(元のコードを復元)
rmmod KVM_XJ

他のカーネルへの対応

カーネルバージョンによってコンパイル最適化が異なり、je 命令のオフセットも異なります。dump_tool.py で自動解析します:

root@kitploit:~
# 1. ホストから kvm.ko をダウンロード
scp root@ホスト:/lib/modules/.../kvm.ko.xz .
xz -d kvm.ko.xz

# 2. 解析ツールを実行
python dump_tool.py kvm.ko

# 3. ツールがパッチオフセットを出力するので、KVM-XJ.c 内の 0x108 を修正

検証済みカーネル

カーネルバージョンje オフセット状態
4.18.0-496.el8.x86_640x108テスト済み
4.18.0-358.el8.x86_640xe8テスト済み

注意事項

  1. 使い方やコードが分からない場合は、使用しないことを推奨します。
ツールをダウンロード
カーネルアップグレード&再起動
ホストの再起動が必要で、全 VM が停止
nested=0(ネステッド仮想化を無効化)ネステッド仮想化機能が失われ、VM 内で VM を実行不可
kpatch 方式kernel-debuginfo が必要、コンパイルに 10~20 分、依存関係が複雑
ftrace 関数置き換えkvm_mmu_get_child_sp が GCC でインライン化されており、独立した関数エントリがない
私の text_poke 方式コンパイル 10 秒、1 つの .c ファイル、脆弱性命令を直接修正
機能影響
ホストの再起動不要
VM の再起動/マイグレーション不要
ネステッド仮想化(VM 内で VM を実行)維持、正常に使用可能
仮想マシンの作成/起動正常
KSM メモリ統合影響なし、独立した機能
CPU パフォーマンスほぼ影響なし(NOP は CPU を消費しない)
メモリシャドウページテーブルが再利用されず、割り当て毎に新しいページが確保されるため、少量のメモリを余分に消費
KVM モジュールのアンロード正常(rmmod で元のコードが自動復元される)
不要
ネステッド仮想化維持