针对 CVE-2026-23111 的可用本地权限提升漏洞利用程序,该漏洞是 Linux 内核 nf_tables 子系统中的
释放后使用(use-after-free)漏洞。已在 linux-6.12.69(x86-64)上测试。
该漏洞利用程序假定目标内核使用以下配置构建:
| 选项 | 值 | 原因 |
|---|---|---|
CONFIG_NF_TABLES | y | 存在漏洞的子系统 |
CONFIG_USER_NS | y | 以非特权方式驱动 nf_tables(user+net 命名空间) |
CONFIG_RANDOMIZE_BASE | y | KASLR — 在运行时被绕过(阶段 1) |
CONFIG_MEMCG | y | 对象落入 kmalloc-cg-* 缓存(喷射所假定) |
CONFIG_STATIC_USERMODEHELPER | n | modprobe_path 必须可写 |
SLAB_FREELIST_RANDOM / HARDENED | n | LIFO 空闲链表使回收保持可靠 |
offsets.h 中的偏移量特定于某一个内核构建 — 对于任何其他内核都需要重新生成
需要 musl-gcc(sudo apt install musl-tools)。
make # builds exp + rootme (static ELFs)
make clean # remove built binaries
两个二进制文件都是静态的,因此它们可以在没有共享库的最小 busybox initramfs 中运行。
exp 期望 rootme 位于目标机上其旁边的 /cve-2026-23111-poc/ 目录中。
offsets.h 是从特定构建生成的。对于不同的 vmlinux:
make offsets SYSTEM_MAP=/path/to/System.map
gen_offsets.sh 提取符号(single_start、modprobe_path、init_ipc_ns、msleep、
memcpy 等)和 ROP gadget,全部作为相对于内核基址的偏移量。如果
你的内核与 6.12.x 有显著差异,你还需要使用 pahole / 反汇编重新验证
exp.c 中硬编码的结构体偏移量(nft_chain 布局、nft_expr_ops.validate、
init_ipc_ns + 0x110、msg_queue.q_messages、xa_node.slots)。
此代码发布用于防御性安全研究和教育。它针对的是运行已知存在漏洞内核的实验虚拟机。 请勿将其用于你并不拥有或未获授权测试的系统。作者对滥用不承担任何责任。
| 文件 | 用途 |
|---|
exp.c | 漏洞利用程序(阶段 1 → 4)。 |
rootme.c | 极小的静态 setuid(0); execl("/bin/sh") 辅助程序,用于获得 root shell。 |
netlink_min.h | 极简的 Netlink 定义(针对 musl 构建,不使用内核 uapi 头文件)。 |
offsets.h | 目标内核的 kbase 相对符号/gadget 偏移量。 |
gen_offsets.sh | 从内核 System.map / vmlinux 重新生成 offsets.h。 |
Makefile | 将 exp 和 rootme 构建为静态 musl ELF。 |