针对 CVE-2026-98432 的只读审计脚本,该漏洞是 Linux 内核 IPv4 TCP 握手过程中的一个释放后使用(use-after-free)问题。SYN-ACK 可能基于另一个 CPU 刚刚释放的 IP 选项构建。触发方式是对普通监听套接字发起网络流量,因此与同类审计中的页缓存和校验和缺陷不同,它不需要本地访问权限。
当连接完成时,tcp_v4_syn_recv_sock() 会将请求套接字的 IP 选项(ireq->ireq_opt)交给新的子套接字,而不进行复制。针对同一请求套接字的重传 SYN 若在另一个 CPU 上处理,可能仍在用这些选项构建 SYN-ACK。自 079096f103fa(4.4)起,请求套接字在无监听锁的情况下运行,子套接字的选项通过普通 kfree() 释放,而 ip_options_build() 会读取已释放的内存(CWE-416)。
请求套接字迁移中存在第二个竞态,仅在启用 net.ipv4.tcp_migrate_req=1 或存在 BPF SK_REUSEPORT_SELECT_OR_MIGRATE 程序时才会出现。修复方案将两处释放都改为 kfree_rcu()。
| CVE | CVE-2026-98432 |
| 组件 | Linux 内核 net/ipv4(tcp_v4_syn_recv_sock、inet_sock_destruct、tcp_v4_reqsk_destructor) |
| 类别 | 释放后使用,可通过监听 TCP 套接字远程触发 |
| 引入版本 | 079096f103fa "tcp/dccp: install syn_recv requests into ehash table"(4.4);迁移部分为 c905dee62232 |
| 上游修复 | e3f33b0a1d89 "ipv4: free inet_opt and ireq_opt after an RCU grace period"(Eric Dumazet),位于 7.3-rc7 |
| 稳定版修复 | 5.10.272、5.15.223、6.1.190、6.6.159、6.12.113、6.18.56、7.2.10 |
| 报告者 | Xinyang Ge |
| 严重性 | CNA:9.8(AC:L)。Red Hat:8.1(AC:H,因竞态所致),无可用缓解措施。Ubuntu:High |
| Debian | bookworm 在 6.1.190-1 中修复,trixie 在 6.12.113-1 中修复,forky 为 7.2.12-1 |
| Ubuntu | 各发行版修复进行中,尚未发布 |
| Red Hat | 未发布受影响产品表或勘误 |
稳定版版本已于 2026-10-29 对照 kernel.org 的 ChangeLog-* 文件进行核查。在每个分支中,所列版本是首个包含该修复的版本,其前一个版本则不含该修复。主线版本通过比较标签进行核查:7.3-rc6 不含该提交,而 7.3-rc7 包含。没有修复记录的分支系列(4.x、5.4、6.2–6.5、6.7–6.11、6.13–6.17、6.19、7.0、7.1)已停止维护,报告为存在漏洞。发行版状态截至同一日期。
该缺陷需要一个监听 TCP 套接字和一个携带 IP 选项的 SYN,以及两个 CPU 之间一次失败的竞态。脚本无法判断你的网络使这些选项的可达程度,因此它只报告能看到的内容(监听器),其余留给你判断。
它仅进行初步排查,不做任何更改。它从不加载模块,从不打开套接字,从不触碰 sysctl 或防火墙规则,也从不运行 PoC,因此可在生产环境中安全运行。
changelog.Debian.gz 或 rpm -q --changelog)中搜索 CVE ID 或上游提交主题。在那里找到的修复始终优先。/proc/net/tcp 和 /proc/net/tcp6 枚举此网络命名空间的 TCP 监听器:
net.ipv6.bindv6only=1;net.ipv4.tcp_migrate_req 并记录容器运行时,其发布的端口和私有网络命名空间无法被看到。它们计为暴露面。--json 输出的 JSON。发行版行是快照(2026-10-29)。厂商会在其后发布修复,因此旧副本可能会对早已修补的内核报告“修复进行中”。报告会打印快照年龄,并在超过 14 天时警告一次。该警告从不改变判定结果,且变更日志检查和上游阈值不会过时。使用 --quiet 时,仅当过时才会出现第二行 NOTE:,因此解析第 1 行的解析器不受影响。JSON 包含 matrix_date、matrix_age_days 和 matrix_stale。
当它发出警告时,请拉取此脚本的最新版本。
| 判定 | 含义 | 退出码 |
|---|---|---|
| PATCHED | 在变更日志或上游/厂商表中找到修复 | 0 |
| NOT_APPLICABLE | 内核早于 4.4 | 0 |
| MITIGATED | 未修复,但当前没有可通过 IPv4 访问的 TCP 监听器。仍需修补:启动任何服务都会重新打开它 | 1 |
| VULNERABLE | 未修复且至少有一个监听器(或 /proc/net/tcp 不可读,或存在容器运行时) | 2 |
| UNKNOWN | 无法判断,例如没有变更日志且没有矩阵行 | 3 |
| ERROR | 选项错误或缺少工具 | 4 |
MITIGATED 故意很少见:几乎每台服务器都在监听某些东西。本地用户还可以在私有用户+网络命名空间中运行监听器;该途径会在报告中注明但不计入,因为其可利用性未经验证。
处理了两种简单版本比较会出错的情况:
ID=debian,但运行自己的 proxmox-kernel-* 系列。Debian 的下限不适用,因此它只能通过变更日志命中来清除。...-microsoft-standard-WSL2)。发行版的规则不适用;上游表适用。从 Windows 使用 wsl --update 更新它。sudo ./cve-2026-98432-audit.sh # text report
./cve-2026-98432-audit.sh --json # JSON on stdout
./cve-2026-98432-audit.sh --quiet # one line, exit code carries the verdict
./cve-2026-98432-audit.sh --since 2026-09-01 --no-hunt
它无需 root 权限即可运行,但此时 journal 搜索和部分软件包查询可能为空。真实报告示例见 examples/。
更新内核并重启。没有能在运行时修复该问题的开关,Red Hat 也未列出任何缓解措施。在此之前,你可以降低暴露面:
net.ipv4.tcp_migrate_req=0(默认值)。这仅能关闭迁移竞态。bash tests/run_tests.sh # 95 cases, run as a normal user
每个用例都会以子进程方式运行脚本,针对模拟二进制文件和每个用例独立的 fixture 目录树(包括 /proc/net/tcp 行)进行测试。测试框架会断言使用的是模拟内核,因此通过 PATH 绕过无法让测试在不知不觉中审计真实机器。每个与判定结果相关的分支都经过了变异测试:在副本上破坏该分支会使测试失败。
copyfail-audit、dirtyfrag-audit、cve-2026-46331-audit、linux-pagecache-cve-audit、cve-2026-99999-audit、php2shell-audit。退出码遵循 cve-2026-99999-audit 的约定(1 = MITIGATED,2 = VULNERABLE)。
MIT