CVE-2026-98432 Linux TCP 释放后使用漏洞工具包:内核补丁检查、竞态预言机触发、pcap UAF 分析、KASLR 偏移恢复以及 nftables 加固。

仅限道德使用 – 经授权的安全测试
本仓库仅为经授权的安全专业人员、蓝队和渗透测试人员提供工具。 未经授权访问计算机系统在CFAA(美国)、Computer Misuse Act(英国)、TCK 243/244(土耳其)以及全球类似法律下均属违法。

CVE-2026-98432 是 Linux 内核 IPv4 TCP 协议栈中的一个释放后使用(use-after-free)漏洞。携带 IPv4 选项的入站 SYN 会使内核将这些选项的副本保存在请求套接字上。如果 SYN 在恰当时机被重传,一个 CPU 可能释放该副本,而另一个 CPU 仍在读取它以构建 SYN-ACK,从而导致 ip_options_build() 中出现释放后使用。
当服务器在套接字之间迁移待处理的连接请求时(net.ipv4.tcp_migrate_req=1,或 BPF_SK_REUSEPORT_SELECT_OR_MIGRATE 程序),还存在第二个触发路径。两个触发路径具有相同的根本原因:inet_sock_destruct() 和 tcp_v4_reqsk_destructor() 使用普通的 kfree() 释放选项,而不是等待 RCU 宽限期。
tcp_v4_save_options() 将入站 IPv4 选项(ireq_opt)存储在请求套接字上。tcp_v4_syn_recv_sock() 将 ireq_opt 交给子套接字而不进行复制。inet_sock_destruct() 使用普通的 kfree() 释放 inet_opt。tcp_v4_send_synack() → ip_options_build(),后者读取已被释放的选项。上游修复为提交 e3f33b0a1d89(“ipv4: free inet_opt and ireq_opt after an RCU grace period”),该提交将两处释放改为 kfree_rcu()。IPv6 不受主要问题影响。
5.15.0-xxx 之类的发行版版本号与上游版本号进行比较。请查看厂商自己的安全跟踪器。| 日期 | 观察 | 来源 |
|---|---|---|
| 2026-11-04 | Ubuntu 22.04 LTS(及更新版本)的修复仍仅在 -proposed 中;标准 -updates 用户仍使用存在漏洞的内核,直到修复被提升。受影响版本默认启用 MPTCP,但该漏洞并非 MPTCP 特有。 | Ubuntu CVE Tracker · Ubuntu Blog – Fixes in -proposed |
| 2026-11-02 | AWS 确认该缺陷影响 Linux 内核 4.4+,且基于 Ubuntu 的 Lightsail 蓝图在影响范围内;缓解措施是安装已修补的内核或应用临时防火墙规则,丢弃带有 IP 选项的 IPv4 TCP 数据包。 | AWS Docs – Address CVE-2026-98432 on Lightsail |
| 2026-10-15 | 官方内核 CVE 公告:根本原因是在 kfree() 释放 inet_opt / ireq_opt 之前缺少 RCU 宽限期;已在 5.10.272、5.15.223、6.1.190、6.6.159、6.12.113、6.18.56、7.2.10、7.3-rc7 中修复。 | Linux CVE Announce – Openwall |
注意: 这些观察确认了暴露面(存在漏洞的内核 + 原版 Ubuntu 上默认启用的 MPTCP)以及官方修复状态;它们并不确认本仓库中的漏洞利用在任何特定主机上成功执行。
| 工具 | 用途 | 目标用户 |
|---|---|---|
cve_2026_98432 | 红队与蓝队工具包。源代码与运行时补丁检查、网络探测、带标记复用检测的竞态预言机、pcap 分析、KASLR 偏移恢复以及缓解指导。单条命令,支持交互式菜单或直接标志。 | 红队、蓝队、授权渗透测试人员 |
--check | 本地内核版本与源代码树检查。 | 蓝队、审计人员 |
--probe | 确认 TCP 监听器可达,且 IPv4 SYN 选项能到达协议栈。 | 红队、蓝队 |
--race | 基于标记的竞态预言机。发送构造的 SYN 并检查 SYN-ACK 是否存在跨流标记复用。 | 红队(Prob) |
--pcap | 离线 pcap 分析。检测 UAF 证据和内核指针候选。 | 蓝队(Partial) |
--map | 使用 System.map 从泄露的 text 指针恢复 KASLR 偏移。 | 红队(Partial) |
--harden | 应用或预览缓解措施(关闭 MPTCP、关闭迁移、丢弃 IP 选项)。 | 蓝队(Prob) |
| 标签 | 含义 |
|---|---|
| (无标签) | 确定性。相同输入,相同输出。 |
| (Prob) | 竞态结果可能因运行而异。工具会在限定时间内重复尝试。 |
| (Partial) | 依赖正确的输入。当提供有效的 pcap 或匹配的 System.map 时工具才能工作。 |
| 功能 | 状态 | 说明 |
|---|---|---|
| 源码树补丁检查 | 确定性 | 读取 af_inet.c 和 tcp_ipv4.c,在两个析构函数中查找 kfree_rcu。 |
| 运行内核检查 | 确定性 | 将 uname -r 与修复版本表进行比对。 |
| 网络探测 | 确定性 | 打开 TCP 连接并发送最小 HTTP 请求。 |
| 竞态预言机 | (概率性) | 发送构造的 SYN,观察 SYN-ACK 中的标记复用。需要 root 和 CAP_NET_RAW。 |
| Pcap 分析 | (部分) | 解析 pcap,查找跨流标记复用和内核指针候选。 |
| KASLR 偏移恢复 | (部分) | 需要匹配的 System.map 和至少一个泄露的 text 指针。 |
| 缓解措施应用 | (概率性) | 写入 nftables 规则和 sysctl。该规则丢弃携带 IP 选项的 IPv4 TCP 数据包。 |
| 大规模扫描 | 确定性 | CIDR、文件或单一目标。异步执行,带速率限制和进度输出。 |
| JSON / JSONL / CSV | 确定性 | 由输出文件扩展名决定。 |
| 代理 / Tor / 抖动 | 确定性 | 应用于每个网络操作。 |
| 恢复 | 确定性 | 将已完成的 target:port 对保存到状态文件。 |
git clone https://github.com/tc4dy/CVE-2026-98432-PoC-Exploit
cd CVE-2026-98432-PoC-Exploit
# No requirements; no extra pip packages needed.
从仓库根目录启动该工具包:
python -m cve_2026_98432
无参数运行时,它会打开一个交互式菜单:
[1] source patch check
[2] network probe (Prob)
[3] race trigger (Prob)
[4] pcap analysis (Partial)
[5] KASLR resolve (Partial)
[6] apply hardening (Prob)
[0] exit
| 标志 | 描述 |
|---|---|
-t, --target | 目标 IP、主机名或 CIDR |
-l, --list | 包含目标的文件(每行一个,# 表示注释) |
-p, --port | 目标端口(默认:80) |
--timeout | 连接/读取超时时间,单位为秒(默认:10.0) |
--check | 运行本地内核和源码树补丁检查 |
--probe | 确认 TCP 监听器可达 |
--race | 运行竞态预言机(Prob) |
--pcap | 分析 pcap 文件 |
--map | 用于 KASLR 偏移恢复的 System.map |
--harden | 显示缓解计划,或通过 --apply 应用 |
--apply | 应用缓解措施(需要 root 权限) |
--proxy | 单个 SOCKS5 代理(例如 socks5://127.0.0.1:1080) |
--proxy-file | 包含 SOCKS5 代理的文件(按请求轮换) |
--tor | 通过 Tor 路由(socks5://127.0.0.1:9050) |
--jitter | 请求之间的 MIN-MAX 秒数(默认:0-2) |
--rate-limit | 每秒请求数(默认:5.0) |
--threads | 用于大规模扫描的并发工作线程数(默认:10) |
--resume | 用于恢复大规模扫描的状态文件 |
-o, --output | 将结果保存为 .json、.jsonl 或 .csv |
-v, --verbose | 详细输出 |
-q, --quiet | 抑制非错误输出 |
--dry-run | 打印计划而不发送数据包 |
--no-color | 禁用 ANSI 颜色 |
| # | 场景 | 命令 |
|---|---|---|
| 1 | 交互式菜单 | python -m cve_2026_98432 |
| 2 | 本地内核检查 | python -m cve_2026_98432 --check |
| 3 | 源码树检查 | python -m cve_2026_98432 --check --source /usr/src/linux |
| 4 | 网络探测 | python -m cve_2026_98432 -t 10.0.0.5 --probe |
| 5 | 竞态预言机 | sudo python -m cve_2026_98432 -t 10.0.0.5 --race |
| 6 | Pcap 分析 | python -m cve_2026_98432 --pcap capture.pcap |
| 7 | Pcap 分析 + KASLR | python -m cve_2026_98432 --pcap capture.pcap --map System.map |
| 8 | 缓解预览 | python -m cve_2026_98432 --harden |
| 9 | 应用缓解 | sudo python -m cve_2026_98432 --harden --apply |
| 10 | 从文件进行大规模扫描 | python -m cve_2026_98432 -l targets.txt --probe -o out.jsonl --threads 20 |
| 11 | 通过 Tor 进行大规模扫描 | python -m cve_2026_98432 -l targets.txt --probe --tor --jitter 1-4 |
| 12 | 恢复大规模扫描 | python -m cve_2026_98432 -l targets.txt --probe --resume state.json -o out.json |
| 13 | 试运行 | python -m cve_2026_98432 -l targets.txt --probe --dry-run |
竞态预言机发送带有 SEC IPv4 选项的精心构造的 SYN,该选项携带一个随机的 32 位令牌。然后它检查目标返回的 SYN-ACK。
SEC 选项包含与发送时相同的令牌,则该流是干净的。该预言机是概率性的。它在有限的时间内重复尝试,并报告首次观察到的重用。在多次尝试中重复出现标记重用会使发现更有力。
pcap 分析器使用相同的标记。如果捕获中某个 SYN-ACK 包含另一个流的令牌,则被视为 UAF-OBSERVED。
分析器读取经典 pcap 文件(原始 IP、以太网、Linux cooked capture v1 和 v2),并检查携带 IPv4 选项的 TCP SYN 和 SYN-ACK 段。
对于每个带有 SEC 选项的 SYN,令牌会记录在该流下。对于每个 SYN-ACK,分析器检查返回的令牌是否与该流的 SYN 令牌匹配。不匹配会报告为跨流标记重用。
同时,分析器扫描选项块中看起来像内核指针的 8 字节值: