Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cve-2026-98432-mitigation-iptables — 用于检查 Linux 主机是否存在 CVE-2026-98432 的 Shell 脚本,并应用一条临时 iptables u32 规则来丢弃带有 IP 选项的 IPv4 TCP 数据包,附带 systemd 单元、自检和回滚功能。 | Kitploit
工具/GitHubGitHub/schnied/cve-2026-98432-mitigation-iptables
防御工具漏洞分析脚本与自动化配置审计网络安全错误配置事件响应
GitHubschnied/cve-2026-98432-mitigation-iptables

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

cve-2026-98432-mitigation-iptables

用于检查 Linux 主机是否存在 CVE-2026-98432 的 Shell 脚本,并应用一条临时 iptables u32 规则来丢弃带有 IP 选项的 IPv4 TCP 数据包,附带 systemd 单元、自检和回滚功能。

查看仓库
12天前尚未审核

Deutsch

CVE-2026-98432 临时缓解措施,iptables 版本

本仓库包含三个脚本,用于检查 Linux 主机是否存在 CVE-2026-98432,并在没有可用修复内核的情况下,通过一条 iptables 规则丢弃携带 IP 选项的 IPv4 TCP 数据包。它是 typhoon1217/cve-2026-98432-mitigation 的 iptables 对应版本,后者使用 nftables 实现相同功能。这是一种临时缓解措施,而非修复。它未针对真实漏洞利用进行测试(目前没有公开的 PoC),也没有任何厂商为其背书。作者是一名个人管理员,而非厂商。

适用对象

本方案适用于无法获取修复内核且无法运行 nftables 版本的主机:

  • 不再接收内核更新的旧版 Debian 发行版:Debian 9(stretch,4.9)、Debian 10(buster,4.19)、Debian 11(bullseye,5.10)。它们均已不再列于 Debian 安全跟踪器中针对此 CVE 的条目。
  • 正在等待厂商内核的 Ubuntu LTS 主机。对于 22.04,修复已宣布为 5.15.0-203,对于 24.04 为 6.8.0-149。在启动该内核之前,此缓解措施可填补缺口。
  • 拥有 iptables 但没有 nft,或 nft 版本过旧不支持 ip hdrlength 的主机。
  • 希望在新旧系统上统一应用同一种方法的主机,从而使应用、检查和回退在各处表现一致。

它不适用于 Proxmox VE 主机,后者拥有自己的修复内核(7.0.14-25-pve 及更高版本),且其桥接流量需要 nftables 仓库中的桥接规则。它不适用于启用了 SELinux 或 Smack NetLabel CIPSO 标记的主机,这些主机可以在没有 IP 选项的情况下触达易受攻击的代码。它不适用于低于 4.4 的内核,这些内核不包含该缺陷。

如果你的发行版提供了修复内核,请安装它、重启,并在已应用本方案的情况下运行 cve-98432-revert-iptables.sh。

工作原理

CVE-2026-98432 是 IPv4 TCP 连接建立过程中的一个竞态条件。内核将传入 SYN 的 IP 选项保存在 ireq_opt 中,在特定时序下,一个 CPU 释放该对象,而另一个 CPU 仍在读取它。在主线源码中,ireq_opt 仅在 SYN 携带 IPv4 头部选项(即 IP 头部长度超过 20 字节,IHL > 5)时被设置,或通过 CIPSO 标记设置。没有选项时,就没有需要释放或读取的对象。因此,该规则会丢弃所有头部长度超过 20 字节的 IPv4 TCP 数据包:

iptables -t raw -I PREROUTING -p tcp -m u32 --u32 "0>>24&0xF=6:15" -j DROP

u32 匹配读取 IP 头的前四个字节,将第一个字节右移并保留其低半字节,即 IHL 字段(以 32 位字为单位)。6:15 匹配所有大于 5 的值。raw 表的 PREROUTING 钩子在解析内核选项之前、在 conntrack 之前运行。回环流量经过同一个钩子,这正是自检所依赖的。

在带有回环监听器的网络命名空间中,一个普通的 SYN 连接成功,而带有 Record Route 选项的 SYN 超时,规则计数器为 2 个数据包(SYN 和一次重传)。nftables 规则 ip hdrlength gt 5 的行为完全相同。iptables-legacy 和 iptables-nft 均已测试。

带有 IP 选项的合法 TCP 流量很少见。在九台生产主机(邮件、DNS、Web、XMPP)上,计数器在观察窗口内始终保持在自检数据包的数量。

这是否适用于你

  1. 运行 cve-98432-check.sh。它是只读的。查看 status、kernel_upstream_base 和 kernel_changelog_cve。厂商内核以自己的版本号携带修复,因此当运行中内核的变更日志提及该 CVE 时,这优先于版本比较。
  2. 查看 iptables_u32_probe。它必须显示 ok。该探测运行 iptables -C,它只询问规则是否存在,因此不会添加任何内容;答案告诉我们 u32 匹配和 raw 表在此内核上是否可用。
  3. 查看 selftest_ipopt。CONNECTED 表示带有 IP 选项的 SYN 当前可以通过。FAIL 表示它已被丢弃。
  4. 要求:root、bash、带有 xt_u32 和 iptable_raw 的 iptables、systemd。自检需要 Python 2 或 3。没有 systemd 的主机不在覆盖范围内。

已在 Debian 9(iptables 1.6.0,legacy)、Debian 10 和 11(iptables 1.8.x,nf_tables 后端)以及 Ubuntu 22.04(iptables 1.8.7)上测试。启动路径已在 Debian 10 上测试。

应用

脚本通过标准输入经 SSH 发送到主机,因此无需事先复制任何内容。

  1. 在试点主机上运行检查并阅读输出:
    ssh root@HOST 'bash -s' < cve-98432-check.sh
    
  2. 在试点上应用:
    ssh root@HOST 'bash -s' < cve-98432-apply-iptables.sh
    
    它是幂等的。它会安装 /usr/local/sbin/cve-2026-98432-mitigation(start|stop|status)、一个 systemd oneshot 单元 cve-2026-98432-mitigation.service(在 network-pre.target 之前加载该规则),并且仅当内核支持 MPTCP 时,安装 /etc/sysctl.d/99-cve-2026-98432.conf,内容为 net.mptcp.enabled = 0。如果它不是 root、缺少 iptables 或 systemd,或者 u32 探测失败,它会在更改任何内容之前退出。
  3. 将最后几行与参考内容进行比较:
    host=... svc=active enabled=enabled mptcp=n/a
    -A PREROUTING -p tcp -m u32 --u32 "0x0>>0x18&0xf=0x6:0xf" -j DROP
    selftest_plain=CONNECTED
    selftest_ipopt=FAIL TimeoutError
    
    mptcp=0 在 5.6 及更高版本的内核上。较旧的 Python 会打印 FAIL timeout,这是相同的结果。
  4. 重启 pilot,并检查该单元在网络之前已启动且规则已存在:
    ssh root@HOST 'systemctl is-active cve-2026-98432-mitigation; /usr/local/sbin/cve-2026-98432-mitigation status'
    
  5. 推广到其余部分:
    while read -r h; do echo "##### $h"; ssh root@$h 'bash -s' < cve-98432-apply-iptables.sh; done < hosts.txt
    
  6. 如果某个服务使用 MPTCP 监听,请重启该服务。sysctl 仅影响新建的套接字。

验证

在每台已缓解的主机上再次运行检查,并查看两个字段:

字段预期值
cve_serviceenabled/active
selftest_ipoptFAIL ...(携带 IP 选项的 SYN 已被丢弃)

自检使用回环接口。来自网络的流量会经过同一个 PREROUTING 钩子,因此结果同样适用。如果你想从外部确认,nftables 仓库中的 check-blocked.py 和 verify-synack.sh 可以原样用于以这种方式缓解的主机。

要观察计数器:

while read -r h; do
  printf '%-28s ' "$h"
  ssh -n root@$h '/usr/local/sbin/cve-2026-98432-mitigation status' 2>&1 | awk '{print "pkts="$1, "bytes="$2}'
done < hosts.txt

每次自检会增加 2 个数据包。如果计数器增长超过该值,说明带有 IP 选项的真实流量到达了主机;在做任何决定之前先检查这一点。-n 很重要:没有它,ssh 会从标准输入读取剩余的主机列表,循环会在第一个主机后停止。

如果出现问题

症状是 TCP 连接挂起(超时)而不是被拒绝,同时计数器持续上升。

命令效果
systemctl stop cve-2026-98432-mitigation立即关闭,重启后恢复
systemctl disable --now cve-2026-98432-mitigation立即关闭并在重启后保持关闭

在测试主机上测得的兼容性:该规则位于 raw 表中,fail2ban 不会触碰它。已检查 ufw 源码:其 ufw-init-functions 中的 flush_builtins 仅刷新 filter、mangle 和 nat,因此 ufw reload 和 ufw disable 会保留该规则。你自己编写的、执行 iptables -t raw -F 的防火墙脚本会将其移除;之后请重新运行 apply 脚本或执行 systemctl restart cve-2026-98432-mitigation。

修补后移除

  1. 启动修复后的内核并用 uname -r 确认,或运行检查并查找 status=FIXED。
  2. 运行回滚:
    ssh root@HOST 'bash -s' < cve-98432-revert-iptables.sh
    
    如果之前启用了 MPTCP 并且希望恢复它,请添加 --mptcp。
  3. 最后一行必须显示 remaining_u32_rules=0。

限制

  1. 仅覆盖 IP 选项路径。带有 CIPSOV4 映射的 SELinux/Smack 可以在没有选项的情况下设置 ireq_opt;此类主机需要内核修复。
  2. 没有桥接规则。在虚拟机中这不是问题。在会在桥接端口之间交换帧的主机上(Proxmox VE、关闭了 br_netfilter 的 Docker),端口之间的帧不会经过 inet/ip 族的 PREROUTING;请在那里使用 nftables 仓库。
  3. 规则按网络命名空间生效。主机上的容器不受主机规则覆盖;LXC 共享主机内核,因此必须修复主机内核,或者参见 nftables 仓库中的 inject-netns.sh。
  4. systemd 单元以 DefaultDependencies=no 在 network-pre.target 之前运行,因此启动时不存在网络已启动但规则尚未生效的窗口。这一点已在一台 Debian 10 主机上验证。
  5. 未针对真实漏洞利用进行测试。

文件

文件作用
cve-98432-check.sh只读清点:发行版、运行中的内核及软件包背后的上游版本、变更日志中对该 CVE 的搜索、其他已安装内核、MPTCP、LSM、init 系统、nft/iptables/xt_u32 可用性(nft -c 和 iptables -C,均不做更改)、现有防火墙工具、网桥、监听端口、回环自检、摘要。输出为 KEY=value。--no-selftest 跳过监听器。
cve-98432-apply-iptables.sh安装规则脚本、systemd 单元和 MPTCP sysctl,启用并启动该单元,打印状态和自检结果
cve-98432-revert-iptables.sh移除 apply 脚本安装的所有内容,即使脚本文件已不存在也会删除规则,--mptcp 重新启用 MPTCP
LICENSEMIT

报告问题

请在此仓库上提交 GitHub issue。

来源

  • Linux 内核修复提交:https://git.kernel.org/linus/e3f33b0a1d89d738e2b913dab519226eaf76e15b
  • 引入受影响代码的提交(2015 年 10 月,Linux 4.4):https://github.com/torvalds/linux/commit/079096f103faca2dd87342cca6f23d4b34da8871
  • Debian 安全跟踪器:https://security-tracker.debian.org/tracker/CVE-2026-98432
  • Ubuntu CVE 跟踪器:https://ubuntu.com/security/CVE-2026-98432
  • Proxmox VE 论坛帖子(修复于 7.0.14-25-pve):https://forum.proxmox.com/threads/cve-2026-98432-in-proxmox-ve.187339/
  • nftables 变体及源码级分析:https://github.com/typhoon1217/cve-2026-98432-mitigation
  • iptables u32 匹配(libxt_u32.man,镜像):https://git.tizen.org/cgit/external/iptables/plain/extensions/libxt_u32.man
  • ufw flush_builtins:https://github.com/jdstrand/ufw/blob/master/src/ufw-init-functions
下载工具