Linux 服务器的临时防护:窄范围 IPv4 TCP 过滤器、状态检查、备份与回滚。审计将内核修复与过滤器工作区分开来。
Audit: работающее ядро → пакет → основание → UNKNOWN при нехватке данных
Protection: inet + bridge → строгая проверка → откат через 180 секунд
Validation: обычный TCP / IP options / UDP в отдельном namespace
Monitoring: проверка по таймеру → журнал ошибок, без изменения firewall
这不是内核补丁,也不能保证消除所有利用变体。 该脚本为已知的 CVE-2026-98432 IPv4 TCP/IP-options 路径安装一个窄范围网络过滤器。最终修复方案是使用已确认修复该 CVE 的内核,并启动进入该内核。
建议的时效性已核实于 2026 年 11 月 1 日。在应用之前,请检查你所使用发行版厂商的最新状态。
Anthropic 的演示中使用了 MPTCP listener。Go Security Team 警告称:该错误本身位于内核通用的 IPv4 TCP 代码中,因此不存在 MPTCP 套接字并不能证明安全。GODEBUG=multipathtcp=0 是对已知攻击路径的额外限制,而不是对内核修复的替代。
该脚本不会修改 MPTCP,不会安装更新,不会重启应用,也不会重启服务器。该过滤器对已经打开的监听器同样生效。
两个独立的 nftables 表:
inet cve_2026_98432_guard:IP 头长度大于 20 字节的 IPv4 TCP 数据包;bridge cve_2026_98432_guard:网桥上的同类数据包。其余流量继续传递给现有规则。没有完整的 flush ruleset,Docker/Kubernetes/SSH 及其他服务的规则不会被替换。
这是对 IPv4 options 的过滤,而不是 TCP options。常规的 TCP timestamps、window scaling、SACK 以及标准 SSH/HTTPS 连接不会被该条件拦截。带有 IPv4 options 的合法 TCP 流量同样会被丢弃:请检查你的网络要求。
需要 Linux、root、nft、Python 3.8+、Bash 和 systemd,以及内核支持 nftables 的 inet/bridge。
该脚本不会启用发行版防火墙服务,也不会安装依赖。
--check 检查会在应用之前发现缺少必要能力的情况。
如果符合服务器策略,安装缺失工具的示例:
# Debian / Ubuntu:
sudo apt-get install nftables python3
# RHEL / Rocky / AlmaLinux:
sudo dnf install nftables python3
OpenWrt、RouterOS、BSD、Windows、旧版 NAS、无 root/CAP_NET_ADMIN 的容器以及 没有 systemd 的系统不在此安装程序的服务范围内。它们需要厂商提供的单独 说明。该脚本不能被视为通用漏洞扫描器。关于手动配置 Alpine/WSL 的配置文件,请参阅单独说明。
bash mitigate.sh --audit
sudo bash mitigate.sh --audit --json
审计只读取元数据和设置。它不扫描网络、不启动漏洞利用、不下载更新,也不修改 firewall。没有 root 权限时,部分结果会是 UNKNOWN。报告可能包含接口名称和 PID;发布前请对其做匿名化处理。
| JSON 字段 | 含义 |
|---|---|
patch.state | 运行中内核的 PATCHED、VULNERABLE 或 UNKNOWN |
enforcement.enforcement | 仅当两张表完全匹配时才为 ACTIVE_VERIFIED |
persistence.state | CONFIGURED — unit 已启用;实际 reboot 未由此验证 |
coverage.state | PARTIAL_OR_UNKNOWN:namespaces/CNI/NetLabel 需要单独分析 |
rollback_timer、monitor_timer | 自动回滚和可选监控的状态 |
schema_version: 1。--audit 的退出码 0 表示报告收集已完成,并非表示不存在漏洞。请检查独立字段和 reason。
Patch assessment 将运行中内核与精确的软件包进行匹配。内置 vendor-baselines 于 2026 年 11 月 1 日验证,仅适用于 Debian 12/13:linux 6.1/6.12 和 bookworm linux-6.12。它们基于 Debian tracker。对于其他分支、Ubuntu、WSL 和未经验证的发行版,结果保持为 UNKNOWN,而不会根据 uname 编号或 changelog 中仅一次 CVE 提及来推断。对于已知的 vendor trackers,报告中会包含链接。这是对软件包元数据的信任,而非对二进制文件的认证;custom kernels 和 livepatch 需单独检查。
审计仅限于 32 个可见 netns:显示 MPTCP 监听器数量,但不证明 namespaces 的覆盖情况。如果没有足够数据,CIPSO 保持为 UNKNOWN;缺少 netlabelctl 并不能证明不存在 labeling。
请先下载并阅读代码。不要使用 curl | sudo bash。
git clone https://github.com/ZombiePm/cve-2026-98432-mitigation.git
cd cve-2026-98432-mitigation
less mitigate.sh
sudo bash mitigate.sh --check
sudo bash mitigate.sh --apply
当检测到 NetLabel/CIPSO 或 MLS 策略时,应用会在更改安装之前停止。在分析兼容性之后,需明确确认风险:
sudo bash mitigate.sh --apply --accept-ipv4-options-risk
此标志接受破坏带 IP options 的合法流量的风险,而不是
扩大防护。如果未发现 labeling 迹象,兼容性仍标记为 UNKNOWN。
执行 --apply 后,180 秒后自动回滚生效。
请保留当前终端。打开新的 SSH 连接到服务器,并从外部检查
关键服务:VPN、网站、API、邮件、集群通信。
如果一切正常,请从新连接执行:
cd cve-2026-98432-mitigation
sudo bash mitigate.sh --status
sudo bash mitigate.sh --confirm
--confirm 会取消回滚计时器。若不使用它,保护将被自动移除。
确认后,systemd 将在服务器下次启动时加载过滤器。
在确认或手动回滚之前,请勿重启服务器。
请逐个节点应用。对于 Kubernetes 和集群,请先确认 连接保持正常,然后再继续处理下一个节点。
sudo bash mitigate.sh --status
sudo nft list table inet cve_2026_98432_guard
sudo nft list table bridge cve_2026_98432_guard
systemctl status cve-2026-98432-guard.service
journalctl -u cve-2026-98432-guard.service --no-pager
packets 0 计数器表示没有匹配的数据包,而不是没有防护。
单独检查使用 MPTCP 的程序:
sudo ss -Mlnp
不要添加 -t,如果你只想看到 MPTCP:这会将会把普通 TCP 套接字加入采样。即使 MPTCP 输出为空,也不能确认 CVE 已被消除。
在重启以及任何防火墙更改/重载之后,请重复执行 --status。
另一位管理员或防火墙管理器执行完整的 flush ruleset,可能会删除这些表。在这种情况下,请先处理管理配置;要重新加载已保存的过滤器:
sudo systemctl restart cve-2026-98432-guard.service
在通过新的 SSH 连接进行检查并执行 --confirm 之后:
sudo bash mitigate.sh --watch-enable
systemctl status cve-2026-98432-check.timer
journalctl -u cve-2026-98432-check.service --no-pager
sudo bash mitigate.sh --watch-disable
定时器每 60 秒执行一次严格的 --status,加载后的首次检查在两分钟后进行。它不会恢复规则、不会修改 sysctl,也不会发送外部通知。请将 failed unit 接入你自己的监控。两次检查之间可能存在无过滤的间隙;这不是持续防护。--rollback 也会禁用此定时器。
sudo bash mitigate.sh --rollback
该命令会停止计时器、禁用 unit,并且只删除两个自身创建的表。配置文件和备份会保留以供检查。在安装修复后的内核之前,回滚会重新引入被利用的风险。
如有需要,可手动执行:
sudo systemctl stop cve-2026-98432-rollback.timer
sudo systemctl disable --now cve-2026-98432-guard.service
sudo nft delete table inet cve_2026_98432_guard
sudo nft delete table bridge cve_2026_98432_guard
/etc/cve-2026-98432.nft — 仅包含此防护的规则;/usr/local/sbin/cve-2026-98432-guard — 加载器/回滚;/usr/local/sbin/cve-2026-98432-admin — 用于控制的 CLI 安装副本;/var/lib/cve-2026-98432-guard/audit.py — 只读审计的配套脚本;/etc/systemd/system/cve-2026-98432-check.{service,timer} — 仅在 --watch-enable 之后;/etc/systemd/system/cve-2026-98432-guard.service — 自动启动;/var/lib/cve-2026-98432-guard/backup-* — 之前的自有文件和表。仓库中的 guard.nft 是内置规则的可读副本。mitigate.sh
对于安装和严格规则检查是自给自足的;额外的审计
在 audit.py 中实现。运行时加载器使用 /etc 中安装的文件。
netlabelctl 工具并不能证明不存在 labeling。uname -r。截至 2026 年 10 月 30 日,Canonical 仍将多个 Ubuntu kernel flavors 标记为 易受攻击 / work in progress。不要仅仅为了更新的版本号而将任意 mainline 内核安装到生产服务器上。
bash -n mitigate.sh
sudo bash mitigate.sh --verify
sudo bash tests/installer-selftest.sh
python3 tests/test_audit.py
shellcheck mitigate.sh tests/*.sh
自检在隔离的网络命名空间中运行,不会更改主机的防火墙,也不会触发漏洞利用。它检查普通 TCP 能否通过、单个带有四个安全 IPv4 NOP options 的合法 SYN 是否被阻止,以及带有 IPv4 options 的 UDP 是否得以保留。这是对规则的检查,而非对内核漏洞的检查。
第二个测试使用独立的 mount/network 命名空间和 systemd 模拟:检查安装、在存在待处理回滚时拒绝重复应用、确认、重新安装、手动/自动回滚,以及保留他人的防火墙表。特别是,没有 drop 规则的空表应使 --status 失败,即使 unit 处于活动状态。该测试不会更改真实服务和主机文件系统。新的回归测试会拒绝错误的优先级、过早的 accept、不可达链中的 DROP、rate-limited DROP、协议替换以及缺少 IHL 检查;失败的 --confirm 会保留回滚计时器。还会检查 CIPSO 冲突时的拒绝,以及没有自动应用的计时器。nftables 的 JSON 可能省略冗余的 EtherType:符号化的 IP payload 已经指定了 IPv4,检查会考虑这一规范化。带有 dormant 标志的表也不被视为有效防护。
原始配置文件和之前的安装程序已在真实的 Linux/systemd 节点上通过新的 SSH 连接进行过验证。v0.2.0 的新功能通过了带 systemd 模拟的隔离测试;真实的 reboot、timer 以及所有发行版未重新验证。CI 在 Ubuntu 22.04 和 24.04 上运行检查。