您的 Go 服务创建了 MPTCP 监听器。将其转化为远程 Root 的内核漏洞在 Ubuntu 和 RHEL 上仍未修复

CVE-2026-98432 是 Linux 内核 IPv4 TCP 握手中的一个高危 use-after-free 漏洞。Anthropic 演示了针对 MPTCP 监听器的远程 Root 利用,但未公开代码。Go 1.24+ 默认会静默创建这些监听器。在 Kubernetes 和服务网格环境中,该漏洞位于节点内核中,超出网格控制范围。开源模型加上 GPU 访问现在使复现尝试成本更低。团队需要在 Ubuntu 和 RHEL 发布修复程序期间制定明确的临时应对措施。

漏洞简述

CVE-2026-98432 是 Linux 内核 IPv4 TCP 握手代码中的一个竞态条件,可能导致 use-after-free。该错误逻辑自 Linux 4.4 以来一直存在。当新连接完成时,内核会将与待处理请求关联的 IP 选项转移到新套接字,而不进行复制。如果该套接字在另一个 CPU 仍在使用这些选项来响应重传连接请求时被销毁,内核就会读取已释放的内存。IPv6 不受此特定竞态影响。内核自己的 CVE 团队在 CVSS 评分中将其评为 9.8,认为攻击复杂度较低。一些发行版最初评分较低,认为赢得竞态较为困难,不过 Red Hat 后来已更接近较高的评估。

上游修复已在 10 月初应用,并回溯到维护的稳定内核分支。Debian、Oracle Linux(针对其 UEK 内核)以及某些 Amazon Linux 和 SUSE 软件包已发布修正后的内核。截至 2026 年 11 月初,Ubuntu 的受支持版本(包括最近的 LTS 和云变体)以及 Red Hat Enterprise Linux 8、9 和 10 仍将该问题列为易受攻击或正在处理中,尚未发布修复软件包。RHEL 7 不受影响,因为其内核缺少易受攻击的代码。

演示的远程 Root 利用以多路径 TCP (MPTCP) 监听器作为入口点。Anthropic 未发布的的研究模型生成了一个两阶段攻击,首先泄露内核指针以绕过 KASLR,然后利用相同的 use-after-free 覆盖回调并以 Root 权限运行命令。CVE 记录和内核修复均未提及 MPTCP;该关联来自 Anthropic 的披露。底层漏洞存在于普通的 IPv4 TCP 连接建立中,因此未使用 MPTCP 的服务并非自动安全。MPTCP 配置只是为已展示的完整 Root 利用提供了一条可靠路径。

实际后果是,任何接受 IPv4 TCP 连接的 Linux 主机在内核更新前都处于暴露状态。已证明的攻击最高优先级表面是任何打开 MPTCP 监听器的进程。这正是最近 Go 运行时默认行为立即相关的原因。

CVE-2026-98432 流程图:MPTCP 监听器导致已演示的远程 Root 路径,普通 TCP 仍存在 use-after-free,临时禁用,然后是已打补丁的节点内核
已演示的远程 Root 路径使用了 MPTCP 监听器。在 Ubuntu 和 RHEL 仍欠缺内核修复时,请先禁用该默认配置。

为什么 Go 服务是实际暴露面

从 Go 1.24 开始,标准库在 Linux 上为监听器默认启用 Multipath TCP(前提是内核支持)。此更改仅适用于服务端。Dialer 继续使用普通 TCP,除非明确另行配置。结果是,像 `net.Listen("tcp", …)` 这样的常规调用会创建一个 MPTCP 监听套接字,而应用中无需出现任何 MPTCP 相关代码。因此,大多数使用 Go 1.24 或更高版本构建的 Go HTTP 服务器、gRPC 服务、反向代理和自定义监听器都会暴露 Anthropic 模型用于获取远程 Root 的确切配置。

该默认行为由 `multipathtcp` GODEBUG 设置控制,在 Go 1.24 中默认为 listeners-only。运维人员可以通过两种方式覆盖它。在运行时设置环境变量 `GODEBUG=multipathtcp=0` 可同时禁用监听器和 Dialer 的 MPTCP。在主模块的 `go.mod` 文件中添加 `godebug multipathtcp=0`(或使用 `//go:debug` 指令)可在构建时设置相同行为。对 `ListenConfig` 或 `Dialer` 的显式 `SetMultipathTCP` 调用会覆盖 GODEBUG 值,因此这些位置必须单独审计。Go 安全团队将逐程序禁用描述为脆弱的缓解措施:单个剩余的 MPTCP 监听器就足以重新引入已演示的攻击路径,而底层内核漏洞并不限于 MPTCP。

检测非常简单。命令 `ss -Mltnp`(或 `ss -lnMp`)会列出 MPTCP 监听器及其所属进程。在典型的 Go 服务上,输出会同时显示普通 TCP 监听器(`ss -tlnp` 等工具显示的内容)和对应的 MPTCP 套接字。应用 `GODEBUG=multipathtcp=0` 并重启进程后,MPTCP 条目应消失。在系统范围内,`sysctl net.mptcp.enabled=0` 可防止创建新的 MPTCP 套接字,但现有监听器会保留直到其进程重启。这些步骤移除了已证明可被利用的配置。它们不会修复内核中的 use-after-free,因此在安装打过补丁的内核并重启主机前,它们仍是临时措施。

一只 Go gopher 手持一个套接字,该套接字分裂成多条 MPTCP 路径,通过红线连接到一个标有 CVE-2026-98432 的打开内核挂锁
Go 1.24+ 默认打开 MPTCP 监听器。net.Listen("tcp") 就足够了。

利用代码未公开。但地图已公开

Anthropic Frontier Red Team 发布了一份关于 CVE-2026-98432 工作远程 Root 利用的高层次说明,但未公开利用代码、测试中使用的精确内核版本和配置,以及任何现成的概念验证代码。公布的内容是对成功路径的清晰描述:以 MPTCP 监听器为入口点,反复赢得 IPv4 TCP 握手竞态以泄露内核指针并绕过 KASLR,随后利用相同的 use-after-free 覆盖回调指针并以 Root 权限执行任意 Shell 命令。该披露指出,失败的竞态只会中止单个连接尝试而不会崩溃系统,允许攻击者无限重试。在报告的实验室运行中,地址泄露大约花费 48 分钟,命令执行又花费了 5 分钟。

该描述足以作为地图供其他人开始工作。几年前,将此类说明转化为可靠的远程 Root 利用需要专业的内核专业知识和漫长的手动迭代。今天,可以将相同文本提供给 Qwen 等强大的开源权重模型,这些模型可在 readily available 的 GPU 集群上运行。这些模型不会在第一次尝试就生成完整的利用代码,但它们大幅降低了探索、调试和优化的成本。多个独立团队现在可以并行运行该搜索,从而降低了此前将此类工作限制在少数研究者手中的门槛。

迄今为止公开材料仍有限。研究工具包已演示触发竞态并获取内存泄露的能力,但尚未声称复现 Anthropic 描述的完整 KASLR 绕过和 Root 载荷阶段。尚未报告野外利用,该问题也未出现在 CISA 的已知利用漏洞目录中。因此,现实预期并非立即出现大量公开利用,而是从地图公布到独立工作版本出现之间的间隔显著缩短。对于仍在暴露 MPTCP 监听器的 Go 服务运维人员而言,该间隔正是临时缓解措施最为重要的时期。

Kubernetes 和服务网格的现实情况

该漏洞存在于节点上运行的 Linux 内核中。它在 IPv4 TCP 握手期间被触发,任何数据包到达容器、Sidecar 或应用之前。容器镜像、Pod 安全上下文和服务网格配置因此无法弥补这一差距。节点上打过补丁的内核(随后重启,或供应商提供实时补丁时使用)仍是最终修复。在该内核到位之前,调度到该节点上的每个 Pod 都会继承底层主机的暴露风险。

许多 Kubernetes 控制平面组件、Operator 和自定义控制器都是用 Go 编写的。当这些二进制文件使用 Go 1.24 或更高版本构建时,除非明确禁用,否则它们会继承 MPTCP 监听器默认行为。最近 Go 编写的负载也表现出相同行为。Envoy(大多数服务网格使用的数据平面代理)默认不启用 MPTCP。其支持是一项必须在配置中开启的显式监听器选项。因此,网格本身很少是已演示攻击面的来源,而位于网格之后或旁边的 Go 服务则经常是。

网络策略、双向 TLS 和 Sidecar 拦截在内核已接受并处理 TCP 握手之后才生效。它们无法阻止发生在握手中的 use-after-free。能够到达节点上监听端口的攻击者可以尝试竞态,无论最终流量是否会被网格加密或授权。对平台团队的实际意义是,网格控制对许多其他威胁仍然有价值,但不能替代节点内核打补丁或从 Go 组件中移除 MPTCP 监听器的临时步骤。在仍运行自有 Ubuntu 或 RHEL 集群的环境中,节点内核的时间线仍是运维人员的责任。

等待内核修复期间的临时措施

第一个实际步骤是盘点。在每个节点上运行 `ss -Mltnp`(或 `ss -lnMp`)以列出所有 MPTCP 监听器及其所属进程。将这些进程与已知的 Go 二进制文件进行交叉引用。对于任何使用 1.24 或更高版本构建的 Go 服务,通过检查环境或构建时使用的 `go.mod` 文件确认 MPTCP 默认是否仍处于激活状态。这可以快速区分 Anthropic 演示的配置与仅受更广泛 use-after-free 影响的普通 TCP 监听器。

对于可以重启的 Go 服务,请禁用默认配置。在进程环境中设置 `GODEBUG=multipathtcp=0`,或在主模块的 `go.mod` 中添加 `godebug multipathtcp=0` 并重新构建。重启后,重新运行 `ss` 命令以确认 MPTCP 套接字已消失。在完全未使用 MPTCP 的主机上,`sysctl -w net.mptcp.enabled=0` 可防止创建新的 MPTCP 套接字。现有监听器会保留直到进程重启,因此仅设置 sysctl 是不够的。这些更改无需等待发行版内核即可移除已演示的 Root 路径。

在未打补丁的内核仍存在期间,额外的强化措施可以降低成功竞态的几率。在主机防火墙或网络边缘过滤携带 IPv4 选项(Record Route 或 Timestamp)的传入数据包,可以限制内核 CVE 团队用于评分的条件之一。监控重复失败的握手或意外的内核日志条目可提供早期信号,尽管攻击设计为避免崩溃系统。如果供应商为特定 CVE 提供实时补丁,请应用它。这些措施均无法修复 use-after-free 本身。

以上所有步骤均为临时措施。它们缩小或移除了已证明可产生远程 Root 的配置,并可能使其他利用尝试复杂化。它们并未消除底层内核漏洞。单个被忽略的 MPTCP 监听器、显式的 `SetMultipathTCP(true)` 调用,或未来不再需要 MPTCP 的攻击改进,都可能重新打开暴露。只有在节点上安装并运行打过补丁的内核才是持久的补救措施。在 Ubuntu 和 RHEL 发布这些软件包之前,盘点和禁用操作仍是运维人员可用的最高杠杆控制措施。

这对平台团队意味着什么

CVE-2026-98432 为组织运行自有 Kubernetes 集群时仍需承担的剩余责任提供了具体例证。服务网格策略、网络控制和容器强化可解决许多应用层威胁,但它们将节点内核的时间线留给了运维人员。Ubuntu 和 RHEL 尚未为该问题发布修复软件包,而 Debian 和某些其他发行版已经发布。因此,使用前者的团队面临比使用已包含上游修复的基础镜像或托管平台的团队更长的暴露窗口。对于出于合规或支持原因而标准化使用 Ubuntu 或 RHEL 的银行、保险公司和其他受监管运维人员而言,该窗口是一个操作事实而非抽象风险。

这一事件还凸显了现代运行时中静默默认配置的累积效应。Go 决定在监听器上启用 MPTCP 是出于性能和未来-proofing 考虑,并且已记录在案。实际上,它产生了一个广泛部署的配置,该配置与已演示的远程 Root 路径匹配,而无需应用所有者明确请求。其他技术栈中也存在类似默认配置。将语言和运行时行为视为容器内实现细节的平台团队,可能会错过仅在内核漏洞公布后才可见的主机级暴露。包含节点内核版本和长期运行服务有效套接字选项的盘点流程可减少此类意外。

最后,公开技术地图与广泛可用的开源权重模型的结合,缩短了临时控制措施足够有效的间隔。已将节点内核打补丁纳入可预测节奏的组织,或使用安全响应更快的发行版内核的组织,能够以更少中断吸收此类问题。那些仍在等待 Ubuntu 或 RHEL 软件包的组织,必须在准备内核更新期间将 Go MPTCP 默认视为立即可逆的控制措施。更广泛的教训是,商品化 Kubernetes 并未消除拥有主机操作系统生命周期的必要性。它只是重新定位了该所有权变得可见的点。

结论与后续步骤

优先顺序明确无误。在每个节点上打过补丁的内核是唯一能关闭 use-after-free 的措施。在 Ubuntu 和 RHEL 发布这些软件包之前,最高杠杆的临时控制措施是从 Go 服务和任何其他打开它们的进程中移除 MPTCP 监听器。该步骤消除了 Anthropic 模型用于获取远程 Root 的配置。它不会修复内核漏洞,也不会防范所有可能的未来攻击改进,但它有意义地减少了已证明的攻击面。

立即检查成本低廉。在每个节点上,使用 `ss -Mltnp` 列出 MPTCP 监听器,识别任何 Go 1.24 或更高版本的二进制文件,并应用 `GODEBUG=multipathtcp=0`(或等效的 `godebug` 指令)后重启。在未使用 MPTCP 的地方,设置 `net.mptcp.enabled=0` 并确认没有监听器剩余。记录当前内核版本和发行版的公告状态,以便在最终软件包出现时无需额外发现工作即可应用。这些操作在大多数集群上可在数小时内完成,并在供应商内核准备期间赢得时间。

对于在 Kubernetes 上运行 Go 负载的团队而言,这一事件提醒我们,即使部署了服务网格,节点内核的时效性仍是运维人员的责任。网格控制对许多其他威胁仍然重要。它们不能替代内核更新或短期移除已演示的 MPTCP 表面。将主机操作系统生命周期视为一流平台关注的组织,将以更少中断吸收此类问题。那些仍将其视为外部依赖的组织,将在公布后继续发现,安静修复的窗口已经缩小。实际的下一步是今天运行盘点,并将 Ubuntu 和 RHEL 内核软件包置于关键路径上,一旦它们出现就立即处理。

参考资料

The Hacker News,“Linux Kernel TCP Flaw With 9.8 CVSS Score Affects Ubuntu, Red Hat and Other Distributions”,2026 年 10 月 29 日。

Anthropic Frontier Red Team 研究披露(在多个同期报告中被引用),2026 年 10 月 27 日。

Go 安全团队关于 CVE-2026-98432 和 MPTCP 默认配置的 golang-announce / oss-security 公告,2026 年 10 月 29 日。

Linux 内核 CVE 记录 CVE-2026-98432(kernel.org CNA)。

Ubuntu CVE 跟踪器和 Red Hat CVE 页面关于 CVE-2026-98432(截至 2026 年 11 月初的状态)。

Debian、Oracle Linux、Amazon Linux 和 SUSE 的修复软件包发行公告。