CVE-2026-98432:Linux 内核 TCP 竞态漏洞与 AI 写出的远程 root

导语:一个 2015 年就埋进 Linux 内核的老账——IPv4 TCP 握手里的释放后重用(UAF)竞态——在 2026 年 10 月被翻了出来。内核 CVE 团队给它打上 CVSS 9.8,Anthropic 前沿红队(Frontier Red Team)则直接让模型写出了一条从匿名 SYN 到 root shell 的完整链路:48 分钟拆掉内核地址空间随机化,再 5 分钟执行任意命令。麻烦的是,Ubuntu 和红帽到现在都还没放出补丁。


一、赛程:十一天里发生了什么

项目内容
漏洞编号CVE-2026-98432
类型释放后重用(UAF)+ 检查-使用竞态
引入版本Linux 4.4(2015 年)
上游修复2026 年 10 月 5 日
CVE 公开2026 年 10 月 15 日
内核团队评级10 月 24 日追加 CVSS 3.1 = 9.8(CRITICAL)
厂商评级红帽 8.1(重要)/ Oracle、SUSE 8.1 / 亚马逊 7.0
攻击前提远程、无凭据、无需用户交互,但必须赢得竞态
影响结果内核信息泄露,或提权到 root
在野利用截至 10 月 29 日无任何厂商报告被利用,也未进 CISA 已知被利用漏洞目录

内核团队给的向量是 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H——网络可达、无需权限、无需交互、机密性完整性可用性全高,攻击复杂度还被判为低。理由写在 CVE 记录里:竞态的两侧都由攻击者自己制造,多核调度和堆的整理都不构成攻击者控制之外的条件。

红帽的 CVE 页面一度只给 5.9(中等),理由是竞态难赢,最可能的结果是内核崩溃,”尚未证明存在机密性或完整性影响”;同一天他们的机器可读公告文件却标成 8.1,缺陷跟踪系统把严重级别从 medium 改成 high。同一份公告里的两个分数,本身就是这次漏洞最耐嚼的地方。

二、原理:握手那几毫秒里的一次所有权转移

问题出在 IPv4 建立新连接时的 IP 选项处理上。

CVE-2026-98432 竞态窗口时序

连接完成时,tcp_v4_syn_recv_sock() 把请求套接字里的 ireq_opt(IP 选项)转移给新建的子套接字,但不复制一份。此时另一颗 CPU 可能正在处理同一个请求的重传 SYN,走 tcp_check_req() → tcp_v4_send_synack() 去读那份选项,而读取只持有 rcu_read_lock();随后 ip_build_and_send_pkt() 和 ip_options_build() 还会再读两次 opt->optlen。

自打 2015 年那个把请求套接字塞进 ehash 表的提交(079096f103fa)起,请求套接字的处理不再持有监听锁。于是完全可能发生:子套接字在另一颗 CPU 还在读选项的时候被销毁,inet_sock_destruct() 用一次普通的 kfree() 把内存还回堆里,读的那颗 CPU 随后拿到的是已经释放的内存。TCP 子套接字又没有 SOCK_RCU_FREE 标记,这块内存说没就没了。

触发条件很朴素:一个带 IPv4 Record Route 或 Timestamp 选项的 SYN,外加一次重传 SYN。IPv6 不受第一个问题影响,因为 tcp_v6_syn_recv_sock() 会复制选项。

修复只有一行思路:把 inet_sock_destruct() 和 tcp_v4_reqsk_destructor() 里的 kfree() 换成 kfree_rcu(),等 RCU 宽限期过去再真正释放。这不是逻辑修,是把回收时机交给读侧。

CVE 记录里还提到第二个变体:开启 net.ipv4.tcp_migrate_req=1 或挂了 BPF_SK_REUSEPORT_SELECT_OR_MIGRATE 程序时,请求套接字迁移会克隆一份共享同一 ireq_opt 的对象,克隆体被释放时同样构成释放后重用。

三、AI 写出来的两阶段利用链

前沿红队在 10 月 27 日的博客里披露了完整链路,Anthropic 用的是一个未公开发布的内部研究模型,全过程只经过”初步提示”。

两阶段远程 root 利用链

阶段一,拆地址空间随机化。 利用竞态让内核按被污染的长度字段多拷贝几个字节,并在 SYNACK 里回传。只要有一条回包带上内核指针,攻击者就拿到了地址空间布局。

阶段二,劫持控制流。 同一个释放后重用再溢出缓冲区,把一个回调指针改写成攻击者早已通过普通协议特性塞进内核内存的 payload 地址。内核调用这个指针时,payload 串起一串内核函数,最后执行攻击者指定的 shell 命令。

时间账单很直白:泄露内核指针用了 48 分钟,再花 5 分钟拿到命令执行,全程不需要凭据,不需要用户交互。

这条竞态最狠的地方在于:输掉竞态不会让系统崩溃,只会让这一次握手失败。攻击者可以一直重试,直到撞上那个窗口。技术门槛被绕过去了,剩下的只有时间——而时间恰好是模型最擅长压缩的东西。

不过边界要说清楚:前沿红队没有公开利用代码、目标内核版本和测试配置;演示目标是开着多路径 TCP(MPTCP)监听器的服务器,没有 MPTCP 的机器能不能同样拿下,官方没说。红帽的说法更保守:能连上暴露的 TCP 服务的远程攻击者可以触发竞态,最可能的结果是内核崩溃。

四、多路径 TCP:一个被默认打开的放大器

MPTCP(多路径 TCP)允许一条连接同时走多条网络路径,比如 Wi-Fi 和移动数据一起用。在 Linux 上,应用必须主动申请才会在监听套接字上启用。Go 安全团队 10 月 29 日提醒:从 Go 1.24 开始,Go 程序在 Linux 上默认对监听套接字启用 MPTCP。

也就是说,一大批用 Go 写的对外服务,在一次语言升级之后,攻击面里悄悄多出了一个多路径监听器,而大多数运维根本不知道自家机器上有这东西。

Go 给的临时办法有两个:运行时在环境变量里设 GODEBUG=multipathtcp=0,或者在主模块 go.mod 里写 godebug multipathtcp=0 让构建期关闭。但官方同时说了两句大实话:代码里显式调用 net.ListenConfig.SetMultipathTCP 会覆盖这两个设置;逐个程序关多路径 TCP 是”脆弱的”缓解——漏掉一个监听器就等于没关,而且这套办法还默认假设所有可用利用都必须依赖 MPTCP。

Go 团队目前的判断是”现在改 Go 的默认行为为时过早”,讨论放在 go.dev 的 issue 82717。

五、补丁现状:Ubuntu 和 RHEL 还在拖

发行版厂商评级截至 10 月 29 日状态修复包
Debian trixie未评10 月 16 日已修linux 6.12.113-1(DSA-6568-1)
Debian 12 bookworm未评10 月 17、22 日已修linux 6.1.190-1(DLA-4841-1)
Oracle Linux 7/8/9/10 UEK8.110 月 16 日已修ELSA-2026-500397/398/399
Amazon Linux 2023(6.18 包)7.010 月 24 日已修ALAS2023-2026-3251
Amazon Linux 2023(6.12 包)7.010 月 29 日已修ALAS2023-2026-3335
SUSE Linux Micro 6.2 / openSUSE Leap 16.08.1已修kernel-default 6.12.0-160000.40.1
SLES 15 SP4–SP6 LTSS / SLES 16.08.1测试中无
SLES 15 SP78.1修复进行中无
Amazon Linux 27.0待修无
Ubuntu 22.04/24.04/26.04/26.10 LTS高危进行中,无补丁无
Ubuntu 16.04/18.04/20.04高危受影响,无补丁无
RHEL 8/9/10 + OpenShift 45.9 / 8.1受影响(10 月 29 日原为”推迟到未来更新”)无
RHEL 7不适用不受影响不需要

Ubuntu 自己也把云、FIPS 和实时内核列为受影响或处理中。这两家恰好是企业存量服务器最多的一批。 自建内核的话,修复已进 5.10.272、5.15.223、6.1.190、6.6.159、6.12.113、6.18.56、7.2.10 和 7.3——但内核团队明确说了,这些稳定分支不支持单独 cherry-pick 单个补丁。

六、现在能做什么

立刻打补丁。 发行版已经放包的(Debian、Oracle、SUSE、亚马逊),照公告升级内核,别只升应用不动内核。

暂时打不上的,做三件事:

  • 关闭多路径 TCP:sysctl -w net.mptcp.enabled=0
  • 关闭请求套接字迁移,堵掉第二个变体:sysctl -w net.ipv4.tcp_migrate_req=0
  • 用 nftables 丢掉携带 IP 选项的 IPv4 TCP 包,把触发条件掐在门外:
table ip cve_2026_98432 {
    chain prerouting {
        type filter hook prerouting priority -300; policy accept;
        meta l4proto tcp ip hdrlength > 5 counter drop
    }
}

顺手做资产自查。 查一遍自己的服务到底有没有多路径监听器——Go 1.24 之后的监听套接字默认就是开的,这件事值得单独进一次检查单。顺便把 net.ipv4.tcp_migrate_req 的当前值也记下来。

盯住后续。 前沿红队那篇报告里一共五条链:Chrome 沙箱逃逸(谷歌已分配 62 个 CVE,含 13 个沙箱逃逸)、Safari 同源策略绕过、Android 锁屏绕过、Windows HTTP/3 远程拒绝服务(CVE-2026-33096),以及这条 Linux 内核远程提权。同一套方法论产出的东西,不会只有这一件。

七、我的判断

第一,这不是”AI 挖出漏洞”,是”AI 把老漏洞变成可交付武器”。 释放后重用这个 bug 2015 年就躺在内核里,9.8 分也是内核自己给的。真正变的是交付形态:从”我知道这里有个竞态”到”我这里有一条 53 分钟能跑出 root 的脚本”,中间隔着的从来不是技术,是时间和人手。

第二,9.8 与 8.1 的分歧,本质是对”可重试竞态”的理解差。 厂商说竞态难赢,所以判攻击复杂度高;内核团队说竞态两侧都由攻击者诱导,所以判低。真相在两者之间:一次难赢,但输一次不亏、可以一直赢到为止。48 分钟这个数字就是答案——它不是门槛,是排队时长。

第三,被低估的其实是多路径 TCP。 它不是漏洞,是个放大器;Go 1.24 把它变成默认,等于在无数台机器上无声地开了一个新的远程入口。官方给的缓解还被自己的文档承认是”脆弱的”,因为显式调用能覆盖全局开关。凡是能被一行配置关掉的攻击面,都不叫纵深防御。

第四,补丁窗口就是现实。 这次最扎眼的不是 9.8 分,是 Ubuntu 和红帽两家企业主力发行版至今拿不出内核包,而 Debian、Oracle、SUSE、亚马逊已经修好上线。跑着 Go 服务、又用 Ubuntu 或 RHEL 的组合,今天就该排期,而不是等下一个补丁日。


相关链接

  • The Hacker News 原文:https://thehackernews.com/2026/10/linux-kernel-tcp-flaw-with-98-cvss.html
  • Anthropic 前沿红队披露:https://www.anthropic.com/research/discovering-vulnerabilities-with-claude
  • CVE 记录(CVE-2026-98432):https://www.cve.org/CVERecord?id=CVE-2026-98432
  • Go 安全团队公告:https://groups.google.com/g/golang-announce/c/PCoQcdxoScw/m/aD-MgXEvAAAJ
  • 第三方验证工具(仅检测与竞态触发,不含代码执行):https://github.com/tc4dy/CVE-2026-98432-PoC-Exploit
  • 竞态触发式验证 PoC(无代码执行):https://github.com/Alucard0x1/cve-2026-98432

版权声明:本文由华盟网原创发布,保留所有权利。文中配图由华盟网原创制作。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容