
Lokaler Privilegieneskalations-Exploit für CVE-2026-23111, ein Use-after-free in der nf_tables-Subsystem des Linux-Kernels, mit KASLR-Bypass und ROP-Chain für Kernel 6.12.x.
CVE-2026-23111_exploit
Ein funktionierender Exploit zur lokalen Rechteausweitung für CVE-2026-23111, einen Use-after-free im
Linux-Kernel-Subsystem nf_tables. Getestet auf linux-6.12.69 (x86-64).
Der Exploit setzt einen Zielkernel voraus, der mit folgenden Optionen gebaut wurde:
| Option | Wert | Warum |
|---|---|---|
CONFIG_NF_TABLES | y | verwundbares Subsystem |
CONFIG_USER_NS | y | nf_tables unprivilegiert ansteuern (User- und Netzwerk-Namespace) |
CONFIG_RANDOMIZE_BASE | y | KASLR — zur Laufzeit ausgehebelt (Phase 1) |
CONFIG_MEMCG | y | Objekte landen in kmalloc-cg-*-Caches (vom Spray angenommen) |
CONFIG_STATIC_USERMODEHELPER | n | modprobe_path muss beschreibbar sein |
SLAB_FREELIST_RANDOM / HARDENED | n | LIFO-Freelist hält die Rückgewinnung zuverlässig |
Die Offsets in offsets.h sind spezifisch für einen Kernel-Build — für jeden anderen Kernel müssen sie neu generiert werden
| Datei | Zweck |
|---|---|
exp.c | Der Exploit (Phasen 1 → 4). |
rootme.c | Winziger statischer setuid(0); execl("/bin/sh")-Helfer, um eine Root-Shell zu erhalten. |
netlink_min.h | Minimale Netlink-Definitionen (gegen musl gebaut, keine Kernel-uapi-Header). |
offsets.h | kbase-relative Symbol-/Gadget-Offsets für den Zielkernel. |
gen_offsets.sh | Generiert offsets.h aus einem Kernel-System.map / vmlinux neu. |
Makefile | Baut exp und rootme als statische musl-ELFs. |
Erfordert musl-gcc (sudo apt install musl-tools).
make # builds exp + rootme (static ELFs)
make clean # remove built binaries
Beide Binärdateien sind statisch, damit sie in einem minimalen busybox-initramfs ohne Shared Libraries laufen.
exp erwartet rootme daneben unter /cve-2026-23111-poc/ auf dem Ziel.
offsets.h wird aus einem bestimmten Build generiert. Für ein anderes vmlinux:
make offsets SYSTEM_MAP=/path/to/System.map
gen_offsets.sh extrahiert Symbole (single_start, modprobe_path, init_ipc_ns, msleep,
memcpy, …) und ROP-Gadgets, alle als Offsets von der Kernel-Basis. Zusätzlich müssen die in exp.c
eingebrannten Struct-Offsets (nft_chain-Layout, nft_expr_ops.validate,
init_ipc_ns + 0x110, msg_queue.q_messages, xa_node.slots) mit pahole / Disassembly erneut
verifiziert werden, falls der Kernel nennenswert von 6.12.x abweicht.
Dieser Code wird für defensive Sicherheitsforschung und Bildung veröffentlicht. Er zielt auf eine Labor-VM mit einem bekanntermaßen verwundbaren Kernel. Verwende ihn nicht gegen Systeme, die dir nicht gehören oder die du nicht zur Prüfung autorisiert bist. Der Autor übernimmt keine Haftung für Missbrauch.