# 1. Inspect the host; no changes.
sudo ./cve-2026-98432-mitigate.sh check
# 2. Get a patch-state verdict for the exact running kernel package.
sudo ./cve-2026-98432-mitigate.sh assess
# 3. Apply the stopgap filter and make it survive reboot.
sudo ./cve-2026-98432-mitigate.sh enable
# 4. Prove that normal TCP still works and IP-option TCP is dropped.
sudo ./cve-2026-98432-mitigate.sh verify
# 5. Monitor. Exit 0 = healthy, 1 = mismatch/persistence failure, 2 = no state.
sudo ./cve-2026-98432-mitigate.sh status
# 6. After booting a kernel that Ubuntu marks as fixed.
sudo ./cve-2026-98432-mitigate.sh disable
当检测到 CIPSO/NetLabel 时,enable 会拒绝更改规则集,因为该规则会丢弃所有携带 IP 选项的 TCP 流量,包括带标签的流量。只有在您接受这一权衡时才使用 --ignore-cipso。没有 systemd 的容器或主机应使用 --no-persist;否则,当无法建立重启持久化时,enable 会以退出码 4 退出,同时保持活动规则不变。
CVE-2026-98432 是 Linux IPv4 TCP 握手过程中的一个释放后使用(use-after-free)漏洞。当传入的 SYN 携带 IP 选项时即可触发。真正的修复是打补丁的内核;此脚本是一个临时缓解措施,它在 conntrack 和 Docker NAT 之前丢弃 IP 头长度大于 5(IHL 6-15)的入站 IPv4 TCP 数据包,即携带 IP 选项的数据包。
它支持两种等效的后端:
table ip cve_2026_98432,prerouting 优先级 -310,仅 TCP,计数器,丢弃。raw PREROUTING,u32 匹配 0>>24&0xf=6:15,仅 TCP,计数器,丢弃。nft 形式使用 ip 族和数字优先级,因此它既能在 Ubuntu 16.04 的 nft 0.5 上工作,也能在当前 nft 1.x 上工作。iptables 形式适用于 iptables 1.6 及更高版本。除非传入 --install-nft,否则不会安装任何软件包。
该脚本验证完整的预期规则,而非片段。对于 nft,它要求 pre 链在恰好优先级 -310(或旧式 raw - 10 写法)上承载 prerouting 钩子,并且预期的 DROP 是第一条规则。对于 iptables,它要求 iptables -C 成功,并且完整的首条 raw PREROUTING 规则在规范化后匹配。enable 会修复被移位的规则,而不是拒绝重新应用。
Akamai 的脚本贡献了以下评估和安全理念。其强制执行形式未被采用,因为我们的形式更严格且兼容 16.04。以下按优先级顺序列出最重要的纳入发现:
assess 解析运行中内核的精确镜像包(先 linux-image-$KVER,再 linux-image-unsigned-$KVER,然后是 /boot/vmlinuz-$KVER 的所有者)。诸如 linux-image-generic 之类的元包仅作为上下文显示,绝不作为判定证据。变更日志命中是强有力但可能出错的证据;变更日志缺失加上独立确凿的、等于或高于修复版本的干净上游版本,仍会得出 PATCHED;没有证据的厂商内核会得出 UNKNOWN。enable 以退出码 4 退出,同时保持规则活动。status 独立于 oneshot 的运行时状态评估持久化,并拒绝将 enabled-runtime 视为非持久化。detected 默认拒绝,unknown 警告,not_detected 继续。缺少 netlabelctl 并不能证明 CIPSO 不存在。check 区分已验证可用、存在但未验证、不可用和未知;即使 iptables 可用,--backend nft 也会评估 nft。XDP_PASS 仍会进入内核协议栈。-x)输出,并且在加载 raw 替换规则后,会报告并移除早期版本遗留的 filter/INPUT 规则。规则匹配和状态文件格式向后兼容。你不需要先执行 disable;用此版本重新运行 enable 会就地修复规则、安装更新后的启动单元,并记录新的持久化字段。如果旧状态文件没有 persist= 行,status 会根据单元状态推断持久化情况,而不是因缺少该字段而失败。
需要了解的操作变更:
enable 现在会以退出码 4 退出。此前在这种情况下它可能以 0 退出。check 现在仅在验证到可用后端时返回 0,无可用后端时返回 1,存在但未验证时返回 4,用法错误时返回 2。assess 是新增的,按下文所述返回 0/1/3/4。enable,除非传入 --ignore-cipso。enable,以便应用新的单元顺序和 ExecStart。编制日期: 2026-10-30(更新于 2026-10-31)
Ubuntu 跟踪器检查时间: 2026-10-31 11:59 UTC(页面最后更新于 2026-10-30)。尚未发布修复内核。
范围: Linux 服务器,主要是 Ubuntu 16.04(xenial)、22.04(jammy)、24.04(noble)和 26.04(resolute),包括 Docker/BTCPay 主机。
交付物: 本目录中的 cve-2026-98432-mitigate.sh。
测试环境: Ubuntu 16.04、22.04、24.04 和 26.04。
6.8.0-149.149)、22.04(5.15.0-203.213)、26.04(7.0.0-43.43)和 26.10(7.3.0-10.10)仍显示“vulnerable work in progress”(漏洞修复进行中)。摘自 Ubuntu 描述:
tcp_v4_syn_recv_sock() 将 ireq->ireq_opt 的所有权转移给子套接字(newinet->inet_opt),而不进行复制。tcp_check_req() 发送 SYNACK。tcp_v4_send_synack() 和 inet_csk_route_req() 仅在 rcu_read_lock() 下读取 ireq->ireq_opt。079096f103fa),子套接字可能在 SYNACK 仍在构建时被释放。TCP 子套接字没有 SOCK_RCU_FREE,而 inet_sock_destruct() 使用普通的 kfree() 释放 inet_opt,导致 ip_options_build() 中的释放后使用(use-after-free)。net.ipv4.tcp_migrate_req=1,或 BPF_SK_REUSEPORT_SELECT_OR_MIGRATE 程序):inet_reqsk_clone() 共享 ireq_opt,而 tcp_v4_reqsk_destructor() 也使用普通的 kfree()。inet_sock_destruct() 和 tcp_v4_reqsk_destructor() 中使用 kfree_rcu()。tcp_v6_syn_recv_sock() 会复制选项。IPv6 迁移/CALIPSO 问题正在单独的补丁中处理。实际暴露面: 任何运行 IPv4 TCP 服务的主机——SSH、Web、Docker 发布的端口、BTCPay、Lightning 等——都可被触及。触发条件是 IP 头长度大于 5 的 SYN(即存在 IP 选项)。正常的 TCP 选项(MSS、窗口缩放、SACK、时间戳)不是 IP 选项,不受影响。
尚未为任何受影响的 Ubuntu 发行版发布修复内核。 以下状态与上次检查相比没有变化。
| 发行版 | 内核系列 | Ubuntu 状态 |
|---|---|---|
| 26.10 stonking | 7.3 | 受影响,修复进行中(7.3.0-10.10) |
| 26.04 LTS resolute | 7.0 | 受影响,修复进行中(7.0.0-43.43) |
| 24.04 LTS noble | 6.8 | 受影响,修复进行中(6.8.0-149.149) |
| 24.04 HWE 6.17 / 7.0 | 6.17 / 7.0 | 受影响 |
| 22.04 LTS jammy | 5.15 | 受影响,修复进行中(5.15.0-203.213) |
| 22.04 HWE 6.8 | 6.8 | 受影响,修复进行中(6.8.0-149.149~22.04.1) |
| 20.04 LTS focal | 5.4 | 受影响 |
| 18.04 LTS bionic | 4.15 | 受影响 |
| 16.04 LTS xenial | 4.4 | 受影响 |
| 14.04 LTS trusty | 3.13(默认) | 不受影响;HWE 内核可能受影响 |
云内核和衍生内核(aws、azure、gcp、gke、oracle、ibm、nvidia、lowlatency 等)也被列为受影响或修复进行中。请检查您运行的具体内核包;跟踪器列出了每一个。
079096f103fa("tcp/dccp: install syn_recv requests into ehash table")引入,该提交创作于 2015-10-02 并为 4.4 合并。该提交使请求套接字可以在没有监听锁的情况下被处理,这正是允许子套接字在 SYNACK 构建期间被释放的原因。079096f103fa 向后移植到较旧的基础版本中。请使用针对您确切软件包的 Ubuntu CVE 页面,而不要仅依赖版本号。net.ipv4.tcp_migrate_req=0 可避免请求套接字迁移克隆变体,但不能修复主要的子套接字 UAF。它适合作为纵深防御,而非唯一的缓解措施。sudo /usr/local/sbin/cve-2026-98432-mitigate disable 并验证规则已被移除。过滤器必须:
ip hdrlength),而非 IPv6。meta l4proto tcp),以便 IGMP、组播和 ping -R 继续正常工作。-310,即 raw - 10),从而在连接跟踪之前覆盖主机、回环、Docker 发布的端口和 DNAT。参考 gist 和 BTCPay PR 均实现了此方案。本目录中的脚本实现了相同的规则,并额外提供状态、状态查询、验证、开机持久化和禁用路径。