CVE-2026-98432:检查您的 Ubuntu VPS 并减少暴露

package.json 中的内核漏洞无法修复。在 CVE-2026-98432 警报发生后,我们检查了两个 Ubuntu VPS 实例并应用了有针对性的缓解措施。这是我们的方法、有用的命令和重要的限制。

目标是在等待修补内核时减少暴露,然后验证服务是否仍然可访问。本文记录了一次实际的干预;使配置适应您自己的服务器。

3 11 月 2026 更新

11 月 3 日,我们在两个 VPS 实例上安装了官方 Ubuntu 修复程序。在重新启动并检查新的 SSH 访问、HTTPS 站点和测试的应用程序后,他们现在正在运行内核 7.0.0-43-generic。这些软件包来自提议:这并不意味着 Ubuntu 已完成一般资格或通过稳定渠道分发。外部依赖仍然不可用;完整的应用程序恢复仍需要验证。

以下部分保留了我们 30 10 月缓解措施的说明。 3 11 月后续行动详细介绍了目标安装、重新启动后的检查以及从我们的缓解措施到安装修复程序的四天与自 Ubuntu 条目发布以来的十九天之间的区别。

阅读 3 11 月后续行动和两个 VPS 结果

阅读 Ubuntu 的 2 11 月公告

检查当前 Ubuntu 状态

首先检查您的 VPS

这些命令标识正在运行的内核、发行版、两个网络设置和侦听 MPTCP 套接字。他们不改变配置。如果您的 ss 版本缺乏 MPTCP 支持,则错误并不意味着服务器受到保护。

将结果与您的发行版的安全跟踪器进行比较。从社交媒体帖子复制的内核版本是不够的:发行版可以将修复程序反向移植到自己的软件包中。已安装的软件包也不一定是当前正在运行的内核。

Terminal
uname -r
cat /etc/os-release
sysctl net.mptcp.enabled net.ipv4.tcp_migrate_req
sudo ss -M -l -n -p

我们对两个 VPS 实例进行了哪些更改

10 月 30 日,我们审核了两个 Ubuntu VPS 实例并采取了有针对性的临时措施。我们为携带 IP 选项的 IPv4 TCP 数据包添加了专用过滤器,并禁止在相关网络命名空间中创建 MPTCP 套接字。

一项 Caddy 服务进行了受控重启,以使用调整后的设置重新创建其套接字。五个现有容器保留其进程和启动时间。然后,我们检查了新的 SSH 连接,并收到了来自我们测试的所有七个站点的 HTTPS 200 响应。

我们没有升级操作系统或重新启动任一 VPS。这些结果描述了我们在干预后的检查;它们并不能证明所有可能的利用路径都已被阻止。

使用单独的规则集过滤 IP 选项

这是我们的过滤器的结构,使用示例表名。第一条规则限制日志记录;即使达到该限制,第二个也会丢弃每个匹配的数据包。 IP 选项与普通 TCP 选项(例如 MSS 或 SACK)不同。

将此作为示例来查看并集成到现有防火墙中,并准备好恢复访问和范围回滚。不要更换您的整个配置。检查任何特殊网络要求,包括用于安全标签的 IP 选项。

此过滤器的目标是 IPv4。我们将其描述为减少暴露,但不保证它完全覆盖漏洞。

Terminal
table inet cve_2026_98432 {
  chain prerouting {
    type filter hook prerouting priority -310; policy accept;
    ip protocol tcp ip hdrlength > 5 limit rate 5/minute burst 5 packets log prefix "CVE98432 IPopts " level warn
    ip protocol tcp ip hdrlength > 5 counter drop
  }
}

如果不使用 MPTCP,请禁用它

如果您的服务不需要 MPTCP,则此设置会阻止当前网络命名空间中的新 MPTCP 套接字。它不会关闭已经打开的套接字。再次检查套接字并计划仅重新启动受影响的服务。

要在启动时保留此设置,请在检查现有设置后将 net.mptcp.enabled = 0 添加到专用 sysctl.d 文件中。然后应在计划的重新启动期间测试持久性。

Terminal
sudo sysctl -w net.mptcp.enabled=0

也检查用 Go 编写的服务

在受支持的系统上,默认为 ListenConfig 启用 1.24 的 MPTCP。因此,即使您的应用程序使用 Node.js,用 Go 编写的反向代理也值得检查。

以下设置会更改在服务环境中提供时的默认设置。保留任何其他 GODEBUG 值并重新创建受影响进程的套接字。我们将其用于 Caddy;它不会取代内核修复。

Terminal
GODEBUG=multipathtcp=0

Docker:主机设置只是检查的一部分

MPTCP 设置属于每个网络命名空间。因此,主机上的零值并不表明每个容器都具有相同的配置。

我们检查了现有的命名空间,并添加了对新命名空间的定期检查。使用激活后创建的命名空间进行的测试确认它已得到处理。此检查是定期的,因此在应用之前会有延迟,这也是我们在主机的入口处继续进行过滤的原因之一。

一些先前打开的内部容器插座可以保留。我们将这些套接字与公共侦听器区分开来,而不是将系统设置视为每个套接字都消失的证据。

我们如何检查缓解措施

我们检查了过滤器是否已加载,检查了其计数器,并检查了 MPTCP 设置和侦听器。非漏洞诊断数据包确认已达到丢弃规则。我们没有运行漏洞代码。

我们还打开了一个新的 SSH 连接并从外部检查了站点。现有的防火墙规则被保留。持久性机制已配置并重新加载,但我们在完全重启 VPS 后没有测试它们。

递增的计数器表明数据包与规则匹配。它既不是入侵尝试,也不是完整的保护:我们自己的诊断检查也可以增加它。

下一步:启动到打过补丁的内核

您的发行版的官方修复仍然是首要任务。当它可用于您的系统时,计划其安装和所需的重新启动,然后使用 uname -r 验证实际运行的内核。根据官方状态和您的服务要求决定是否取消临时措施。

这项工作涉及托管您的应用程序的 Linux 基础设施。 npm 更新到 PRNext 无法修补 VPS 内核。自托管还意味着遵循系统的这一层并根据实际服务检查更改。

接下来阅读:在 VPS 上部署应用程序

来源和进一步阅读

返回博客