
CVE-2026-23111(Linuxカーネルnf_tablesサブシステムにおけるuse-after-free)の動作するローカル権限昇格エクスプロイト。カーネル6.12.x向けのKASLRバイパスとROPチェーンを含む。
CVE-2026-23111_exploit
Linux カーネルの nf_tables サブシステムにおける use-after-free である CVE-2026-23111 の動作するローカル権限昇格エクスプロイト。linux-6.12.69 (x86-64) でテスト済み。
このエクスプロイトは、以下の設定でビルドされたカーネルを前提としています:
| オプション | 値 | 理由 |
|---|---|---|
CONFIG_NF_TABLES | y | 脆弱なサブシステム |
CONFIG_USER_NS | y | 非特権で nf_tables を操作する (user+net namespace) |
CONFIG_RANDOMIZE_BASE | y | KASLR — 実行時に回避 (Phase 1) |
CONFIG_MEMCG | y | オブジェクトが kmalloc-cg-* キャッシュに配置される (スプレーがこれを前提とする) |
CONFIG_STATIC_USERMODEHELPER | n | modprobe_path が書き込み可能である必要がある |
SLAB_FREELIST_RANDOM / HARDENED | n | LIFO フリーリストにより回収が確実になる |
offsets.h のオフセットは特定のカーネルビルドに固有のものです — 他のカーネル用には再生成してください
| ファイル | 目的 |
|---|---|
exp.c | エクスプロイト本体 (Phase 1 → 4)。 |
rootme.c | root シェルを取得するために使用される、小さな静的 setuid(0); execl("/bin/sh") ヘルパー。 |
netlink_min.h | 最小限の Netlink 定義 (musl 向けにビルド、カーネル uapi ヘッダー不使用)。 |
offsets.h | ターゲットカーネル用の kbase 相対シンボル/ガジェットオフセット。 |
gen_offsets.sh | カーネルの System.map / vmlinux から offsets.h を再生成する。 |
Makefile | exp と rootme を静的 musl ELF としてビルドする。 |
musl-gcc が必要です (sudo apt install musl-tools)。
make # builds exp + rootme (static ELFs)
make clean # remove built binaries
両バイナリは静的リンクされているため、共有ライブラリのない最小限の busybox initramfs 内で動作します。
exp はターゲット上の /cve-2026-23111-poc/ に rootme が隣接して存在することを前提としています。
offsets.h は特定のビルドから生成されます。異なる vmlinux の場合は:
make offsets SYSTEM_MAP=/path/to/System.map
gen_offsets.sh はシンボル (single_start、modprobe_path、init_ipc_ns、msleep、
memcpy、…) と ROP ガジェットを、すべてカーネルベースからのオフセットとして抽出します。また、
カーネルが 6.12.x と大きく異なる場合は、exp.c に埋め込まれた構造体オフセット
(nft_chain レイアウト、nft_expr_ops.validate、init_ipc_ns + 0x110、msg_queue.q_messages、
xa_node.slots) を pahole / 逆アセンブリで再検証する必要があります。
このコードは防御的セキュリティ研究および教育のために公開されています。既知の脆弱なカーネルを 実行するラボ VM を対象としています。所有していない、またはテストを許可されていないシステムに対して 使用しないでください。作者は悪用に対して一切の責任を負いません。