10 月 27 日,Anthropic 发布研究《用 Claude 发现漏洞》:Claude 在初始提示之后,写出了一个针对 Linux 内核网络栈的远程利用链——向开放多路径 TCP(MPTCP)监听的服务器发送数据包,无需任何凭据、无需用户交互,即可获得 root 权限的 shell 并执行任意命令;实测从泄露内核指针到拿到 shell 分别耗时约 48 分钟和 5 分钟。这个漏洞就是 CVE-2026-98432,kernel.org 给出的 CVSS 3.1 评分高达 9.8。10 月 29 日,Go 安全团队发布公告提醒:Go 1.24 起默认对监听套接字启用 MPTCP,大量 Go 服务"默认"满足了该利用链的前提条件。本文梳理事件全貌、漏洞原理、影响范围与排查修复思路。
一、事件概述:一个 9.8 分的内核网络栈漏洞
CVE-2026-98432 的 CNA(编号分配机构)为 kernel.org,记录标题为"ipv4: free inet_opt and ireq_opt after an RCU grace period",2026 年 10 月 15 日发布、10 月 24 日更新。其 CVSS 3.1 基础评分为 9.8(严重),向量为 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H——意味着远程即可利用、攻击复杂度低、无需任何权限、无需用户交互,一旦得手,机密性、完整性、可用性将全面沦陷。
时间线上有三个关键节点:10 月 27 日 Anthropic 公开利用研究(Claude 发现的内核网络栈零点击远程代码执行漏洞均已上游修补并披露);10 月 29 日 Go 安全团队通过 golang-announce 发布《Protecting against CVE-2026-98432》,指出 Go 1.24 起 MPTCP 默认启用,并给出程序级关闭方法,同时强调"升级到已修复的内核版本才是最佳修复";10 月 30 日,oss-security 邮件列表跟进讨论,Oracle 的 Alan Coopersmith 转发了该公告,社区补充了系统级关闭 MPTCP 的方案及其副作用。
影响版本方面,该缺陷自 Linux 4.4(2016 年初,由提交 079096f103fa 引入相关竞态条件)起存在约十年,目前已在上游修复并回移至所有维护中的稳定内核分支。
二、漏洞原理:一次 SYN 重传竞态引发的释放后使用
用通俗的话解释这个内核网络栈缺陷:TCP 连接建立过程中,内核用"请求套接字"(request socket)保存半连接状态。tcp_v4_syn_recv_sock() 在把半连接"转正"为正式子套接字时,把 IP 选项(ireq_opt)的所有权直接移交给了子套接字,并没有拷贝一份。与此同时,另一个 CPU 可能正在处理同一个请求套接字的重传 SYN,走 tcp_check_req() 路径发送 SYNACK,而这条路径只在 rcu_read_lock() 下读取 ireq_opt。
问题在于:TCP 子套接字没有 SOCK_RCU_FREE 保护,inet_sock_destruct() 释放 inet_opt 时用的是普通 kfree()。于是 SYNACK 还在构建中(ip_options_build() 会两次读取 opt->optlen),内存却可能已经被释放——形成释放后使用(UAF)。之所以现在才可能出现这种时序,是因为提交 079096f103fa("tcp/dccp: install syn_recv requests into ehash table")之后,请求套接字的处理不再持有监听锁,子套接字完全可能在 SYNACK 构建完成前就被释放。
这条主路径之外还有第二条触发路径:请求套接字迁移(net.ipv4.tcp_migrate_req=1,或加载了 BPF_SK_REUSEPORT_SELECT_OR_MIGRATE 程序时)。reqsk_timer_handler() 克隆请求套接字时,新旧两个对象共享同一个 ireq_opt,reqsk_migrate_reset() 清掉旧对象的指针后,仍有 CPU 在继续使用,而 tcp_v4_reqsk_destructor() 同样使用普通 kfree()。
修复思路本身很直接:让 inet_sock_destruct() 与 tcp_v4_reqsk_destructor() 改用 kfree_rcu(),等 RCU 宽限期结束后再释放。需要说明的是,IPv6 的第一条路径不受影响(tcp_v6_syn_recv_sock() 会复制选项);IPv6 迁移路径的类似问题仅在使用 CALIPSO 设置 ipv6_opt 时触发,将由单独补丁处理。
三、AI 写出的两阶段利用链:先破 KASLR,再拿 root
Anthropic 披露的利用链分两个阶段。第一阶段是远程击败 KASLR(内核地址空间布局随机化):攻击者利用上述竞态,诱使内核读取攻击者控制的长度字段、多拷贝字节并通过回包传出;只要某次越界读取的回包中带有内核指针,内核地址空间布局即被摸清。第二阶段是劫持控制流:利用同一个 UAF 缺陷溢出缓冲区,把一个回调函数指针覆写为提前"潜伏"在内核内存中的 payload 地址(payload 借助普通协议功能即可写入);内核调用该回调时,payload 串联调用一系列现有内核函数,最终以 root 权限执行攻击者自选的 shell 命令。
这个竞态对攻击者还有一个非常"友好"的性质:竞态失败只会导致握手失败、不会导致系统崩溃,因此攻击者可以无限次重试直到成功。这也是实测 48 分钟即可泄露内核指针、再花约 5 分钟拿到 root shell 的原因。
前提条件是目标服务器上存在 MPTCP 监听端。Anthropic 与 Go 安全团队都明确强调:底层缺陷并不限于 MPTCP,没有 MPTCP 监听的系统也可能存在类似攻击面——"没开 MPTCP"不能当作免疫证明。
四、影响范围:谁该优先处理
版本面上,Linux 4.4 起受影响,各维护中稳定分支的修复版本为:5.10.272 / 5.15.223 / 6.1.190 / 6.6.159 / 6.12.113 / 6.18.56 / 7.2.10,7.3 不受影响,4.4 之前的版本不受影响。Ubuntu、RHEL、SUSE 等主流发行版的内核均在受影响范围内,各发行版已跟进稳定补丁,具体升级包版本以发行版安全公告为准。
暴露面方面,以下环境建议优先处理:公网提供 TCP 服务的 Linux 服务器、云主机与 VPS、Kubernetes 节点,尤其是运行 Go 1.24 及以上版本服务的机器——Go 1.24 起对监听套接字默认启用 MPTCP,意味着这些服务在未打补丁的内核上"默认"具备利用链所需的前提。
利用现状方面,截至发稿,公开信息集中在研究与概念验证层面,各厂商和 CERT 尚未通报大规模在野利用。但考虑到这是远程、无需认证、可直接获得 root 的内核级漏洞,且利用链已被完整公开,暴露面大的服务器建议按"会被打"的标准提前处理,是否出现在野利用请以厂商与 CERT 通报为准。

五、排查思路:先查版本,再查暴露面
1. 查内核版本:执行 uname -r,与上文列出的本分支修复版本对照,低于修复版本即需处理。
2. 查更新通道:按所用发行版的公告核对可用更新(Debian/Ubuntu 用 apt,RHEL/CentOS/Rocky 用 dnf 或 yum),确认厂商是否已发布对应内核补丁包。
3. 查 MPTCP 暴露:查看 /proc/sys/net/mptcp/enabled(或 sysctl net.mptcp.enabled)确认系统 MPTCP 开关状态;用 ss -tlnp 核对监听端口情况(较新版本 iproute2 支持 ss -M 查看 MPTCP 套接字,具体以本地 ss 版本的帮助为准)。
4. 查 Go 服务:用 go version -m ./你的服务二进制 查看编译所用 Go 版本,1.24 及以上默认启用 MPTCP;同时检查 go.mod 中是否已有 godebug 相关设置。
5. 云主机与托管服务器用户:查看服务商的内核公告与升级说明,部分云厂商会通过自动更新通道推送内核补丁。
六、修复与缓解建议
首选方案是升级内核:按各发行版或厂商官方公告,选择与自身分支对应的修复版本。升级操作请务必保守——先在测试环境验证业务兼容性;生产升级前做好快照或配置备份;选择业务低峰期执行;预留回滚窗口;由于升级内核通常需要重启才能生效,重启前请评估业务影响并提前协调维护窗口。
无法立即升级时,可考虑以下临时缓解手段(均有代价,操作前请先备份配置、评估业务影响):
1. 系统级关闭 MPTCP:sysctl -w net.mptcp.enabled=0(oss-security 讨论中给出的方案)。注意:依赖 MPTCP 的程序会出现异常,正在运行的程序在后续新建连接时也可能报错;这属于系统网络配置变更,操作前请备份原配置,并确认业务不依赖 MPTCP。
2. Go 服务侧关闭:设置 GODEBUG=multipathtcp=0(运行时生效)、在 go.mod 中写入 godebug multipathtcp=0(构建期生效),或使用 net.Dialer / net.ListenConfig 的 SetMultipathTCP 按套接字控制。Go 安全团队明确提醒:逐个程序关闭是"脆弱的缓解"——漏掉任何一个监听口就依然暴露,且它假定所有利用都依赖 MPTCP,不能替代升级内核。
3. 收敛暴露面:通过安全组或防火墙收敛非必要的公网端口,管理界面不直接对公网开放。
4. 观察日志:升级或调整配置后,关注 dmesg 内核告警、业务连接异常与错误日志,发现异常及时排查。
七、后续观察
首先,CVE 描述明确:IPv6 请求套接字迁移路径的类似问题(仅在使用 CALIPSO 设置 ipv6_opt 时触发)将由单独补丁处理,使用 IPv6 的环境也要跟进后续更新。其次,Go 团队正在讨论是否调整 MPTCP 的默认行为(go.dev/issue/82717),关注后续 Go 版本公告。此外,建议持续关注各发行版补丁推送进度,以及是否出现在野利用相关通报;一旦厂商或 CERT 发布在野利用预警,应立即按应急流程排查是否已被入侵。
本文信息来源包括 kernel.org CVE 记录、NVD、Anthropic 利用研究、Go 安全团队公告及 oss-security 邮件列表讨论;具体修复版本与操作步骤,请以各官方公告为准。









暂无评论内容