
Linux カーネル proc ファイルシステムにおけるローカル権限昇格の脆弱性の概念実証(PoC)です。このバグは proc_readdir_de() の use-after-free であり、RB_CLEAR_NODE() を伴わない rb_erase() によって引き起こされ、ディレクトリ列挙中に競合させられる可能性のある古い赤黒木(rbツリー)リンクが残ります。
著者: MadExploits
元となる脆弱性研究および C PoC は Aviral Srivastava(N-DAY RESEARCH)によるものです。このリポジトリには、コンパイルが現実的でない環境向けのシェル版(
exploit.sh)が含まれています。
| 項目 | 詳細 |
|---|---|
| CVE | CVE-2025-40271 |
| コンポーネント | fs/proc — proc_readdir_de() / remove_proc_entry() |
| 種別 | Use-after-free(rbツリーの古いリンク) |
| 影響 | ローカル権限昇格(LPE) |
| アーキテクチャ | x86_64 |
| 影響を受けるバージョン | 6.18-rc5 までの Linux カーネル |
proc ディレクトリエントリが削除されると、エントリの rb ノードに対して RB_CLEAR_NODE() なしで rb_erase() が呼び出されます。解放されたノードは、古いツリーリンクを介して到達可能な状態に残る可能性があります。getdents64() が /proc/self/net/dev_snmp6/ 配下のインターフェース削除と競合すると、カーネルは解放済みメモリを読み取る可能性があります — 多くの場合、スプレーされた msg_msg オブジェクトによって再利用され、カーネルヒープポインタを漏洩する異常な d_ino 値を返します。
PoC は実行中のカーネルバージョンを確認し、パッチ適用済みビルドでは終了します:
| ブランチ |
|---|
| ファイル | 説明 |
|---|---|
exploit.c | 完全な C PoC — netlink veth 管理、pthread 競合、msg_msg スプレー |
exploit.sh | コンパイル不要のシェル版 — unshare、ip、syscall/競合用の組み込み Python 3 |
どちらの実装も同じ悪用手順に従います:
CAP_NET_ADMIN を取得)/proc/self/net/dev_snmp6/ を設定するgetdents64() を veth の高速削除およびヒープスプレーと競合させるd_ino 値で UAF を検出するcat /proc/sys/kernel/unprivileged_userns_clone
# must be 1
exploit.cgcclinux/netlink.h など)gcc -o exploit exploit.c -lpthread
exploit.shbashpython3ip(iproute2)unshare(--map-root-user 対応の util-linux)コンパイラは不要です。
chmod +x exploit.sh
./exploit.sh
gcc -o exploit exploit.c -lpthread
./exploit
脆弱なカーネル — UAF 発動(部分的な成功):
[+] Kernel X.Y.Z — VULNERABLE
[+] Namespace ready...
[+] Created 32 veth pairs (/proc/self/net/dev_snmp6 populated)
[+] UAF HIT! d_ino=0xffff8880........ (kernel heap pointer)
[+] Kernel heap leak: 0xffff8880........
[*] PARTIAL SUCCESS: UAF + heap leak DEMONSTRATED
パッチ適用済みカーネル:
[-] Kernel X.Y.Z — PATCHED
[*] Kernel is patched. Nothing to do.
d_ino には x86_64 カーネルポインタパターン(0xffff000000000000)に一致する値が含まれ、通常は解放された proc_dir_entry データと重なる msg_msg ヘッダー m_list に由来します。modprobe_path の上書きには、漏洩したヒープアドレスとカーネルテキストベースの間のオフセットが必要です — これはビルド固有(KASLR)です。PoC は UAF とリークを実証しますが、完全なチェーンには対象カーネルイメージ用のオフセットが必要です。sysctl -w kernel.unprivileged_userns_clone=0
このプロジェクトは、許可されたセキュリティ研究、教育、および防御的テストのみを目的として提供されます。
| 役割 | 名前 |
|---|---|
| リポジトリ作成者 | MadExploits |
| 元の CVE 研究および C PoC | Aviral Srivastava — N-DAY RESEARCH |
自己責任で使用してください。いかなる保証も提供されません。
| 修正バージョン |
|---|
| 5.10.x | 5.10.247+ |
| 6.1.x | 6.1.159+ |
| 6.6.x | 6.6.123+ |
| 6.12.x | 6.12.73+ |
| 6.18+ | 6.18-rc6+ |
| 7.x+ | パッチ適用済み |