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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-98432 — CVE-2026-98432(Linux IPv4 TCP 释放后使用漏洞)的指南与只读检查脚本:检测内核补丁状态、应用 iptables 临时缓解措施,并在修复后进行验证。 | Kitploit
工具/GitHubGitHub/mahdi-salmanzade/cve-2026-98432
防御工具漏洞分析配置审计网络安全事件响应
GitHubmahdi-salmanzade/cve-2026-98432

CVE-2026-98432

CVE-2026-98432(Linux IPv4 TCP 释放后使用漏洞)的指南与只读检查脚本:检测内核补丁状态、应用 iptables 临时缓解措施,并在修复后进行验证。

查看仓库
41136天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-98432:Linux 内核 IPv4 TCP 释放后使用

可通过网络攻击,无需登录,也无需用户操作。 该漏洞位于处理每个传入 IPv4 TCP 连接的内核代码中。

本指南介绍如何检查服务器、在修补后的内核可用之前保护服务器,以及事后进行清理。以下命令已在 Ubuntu 22.04 和 24.04 服务器上使用。

本文档中的状态截至 2026-10-30。补丁状态变化很快,因此请始终查看您所在发行版自己的安全跟踪器。


这是什么?

  • Ubuntu 安全公告:https://ubuntu.com/security/CVE-2026-98432
  • 上游修复:"ipv4: free inet_opt and ireq_opt after an RCU grace period",提交 e3f33b0a1d89

通俗地说: 一个连接请求(SYN)可以携带 IPv4 选项,即数据包头中很少使用的附加内容,例如记录路由或时间戳。当这样的请求到达时,内核会保留这些选项的副本。如果攻击者在恰到好处的时机重发该 SYN,一个 CPU 可能释放该副本,而另一个 CPU 仍在使用它来构建回复。这就是 ip_options_build() 中的释放后使用(use-after-free),它可能导致服务器崩溃或损坏内核内存。

当服务器在套接字之间迁移待处理的连接请求时(net.ipv4.tcp_migrate_req=1,或使用 BPF_SK_REUSEPORT_SELECT_OR_MIGRATE 程序),还存在第二个触发条件。该设置默认关闭。

Ubuntu 优先级高
CVSS,内核 CNA9.8 严重:网络、无需身份验证、无需用户交互
CVSS,Red Hat8.1,因为 Red Hat 认为该竞争条件更难触发
受影响自 4.4 起的内核
IPv6不受主要问题影响
利用情况未报告在野利用,也不在 CISA KEV 目录中。针对带有 多路径 TCP(MPTCP)监听器的服务器的远程 root 利用已被报告,但尚未公开。

谁面临风险: 任何具有可通过 IPv4 访问的 TCP 端口的服务器,无论是 SSH、HTTP、HTTPS 还是其他任何服务。


补丁状态(2026-10-30)

发行版状态修复于
上游内核✅ 已修复5.10.272、5.15.223、6.1.190、6.6.159、6.12.113、6.18.56、7.2.10、7.3
Debian 12 / 13✅ 已修复6.1.190-1(或 linux-6.12 6.12.113-1~deb12u1)/ 6.12.113-1
Ubuntu 26.10 / 26.04 / 24.04 / 22.04❌ 修复进行中,尚未发布计划:7.3.0-10.10 / 7.0.0-43.43 / 6.8.0-149.149 / 5.15.0-203.213
Ubuntu 20.04 / 18.04 / 16.04❌ 存在漏洞仅通过 Ubuntu Pro(ESM)提供,如果提供的话
RHEL 8 / 9 / 10❌ 报告为“修复推迟”无
Oracle Linux(UEK)✅ 已修复ELSA-2026-500397 / 500398 / 500399
Amazon Linux 2023⚠️ 部分修复kernel6.18 和 kernel6.12 已修复;默认内核和 AL2 待定
SUSE⚠️ 部分修复openSUSE Leap 16.0 已修复;SLES 进行中

Ubuntu 云内核(-aws、-azure、-gcp、-oracle)有自己的版本号。发行版内核会向后移植修复,因此不要将 5.15.0-xxx 这样的发行版版本号与上游版本号进行比较。


分步操作

第 1 步:检查服务器(只读)

此操作仅读取并报告。它不会安装、更改或重启任何内容。将其粘贴到服务器上的终端中:

sudo bash -s <<'EOF'
CVE=CVE-2026-98432; FIX="free inet_opt and ireq_opt"; KR=$(uname -r)
. /etc/os-release
echo "== $PRETTY_NAME | running kernel: $KR"; echo "   build: $(uname -v)"

echo "== Installed kernels (if one is newer than the running kernel, you need a reboot)"
ls -1v /boot/vmlinuz-* 2>/dev/null | sed 's|/boot/vmlinuz-|   |'
[ -f /var/run/reboot-required ] && echo "   !! reboot required"

echo "== Is the fix in the RUNNING kernel's changelog?"
if command -v dpkg >/dev/null; then
  dpkg-query -W -f='   package version: ${Version}\n' "linux-image-$KR" 2>/dev/null
  zgrep -Eqs "$CVE|$FIX" /usr/share/doc/linux-*"$KR"*/changelog.Debian.gz \
    && echo "   PATCHED" || echo "   NOT FOUND -> likely VULNERABLE"
  command -v pro >/dev/null && pro fix "$CVE" --dry-run </dev/null
elif command -v rpm >/dev/null; then
  PKG=$(rpm -qf "/lib/modules/$KR/vmlinuz" "/usr/lib/modules/$KR/vmlinuz" "/boot/vmlinuz-$KR" 2>/dev/null | grep -v 'not owned' | head -1)
  echo "   package: ${PKG:-unknown}"
  rpm -q --changelog "$PKG" 2>/dev/null | grep -Eq "$CVE|$FIX" \
    && echo "   PATCHED" || echo "   NOT FOUND -> likely VULNERABLE"
  if   command -v zypper >/dev/null; then zypper -n -q lp -a --cve="$CVE" </dev/null
  elif command -v dnf    >/dev/null; then dnf -q updateinfo list --all --cve="$CVE" </dev/null
  elif command -v yum    >/dev/null; then yum -q updateinfo list --cve="$CVE" </dev/null; fi
fi

echo "== Exposure"
sysctl net.mptcp.enabled net.ipv4.tcp_migrate_req 2>/dev/null | sed 's/^/   /'
M=$(ss -lnMH 2>/dev/null); echo "   MPTCP listeners (reported root-exploit path): ${M:-none}"
echo "   TCP listeners not on loopback (attack surface):"
ss -ltnH | awk '$4 !~ /^(127\.|\[::1\])/ {print "     "$4}' | sort -u
EOF

把它整段粘贴进去:最后的 EOF 必须单独占一行,且行首不能有空格。

解读输出:

你看到含义下一步
PATCHED正在运行的内核已经包含修复你已完成
NOT FOUND -> likely VULNERABLE正在运行的内核中没有修复第 2 步
!! reboot required,或列出了比正在运行的内核更新的内核已安装更新的内核,但尚未运行第 3 步
A fix is coming soon(Ubuntu)Ubuntu 尚未发布修复现在执行第 2 步,稍后执行第 5 步
MPTCP listeners: none所报告的 root 提权路径当前不适用—
数据库或缓存端口,例如 *:3306、0.0.0.0:6379 或 0.0.0.0:11211它监听所有接口确保防火墙阻止它(见第 4 步末尾)

第 2 步:应用临时缓解措施

下面的规则会丢弃携带 IP 选项的 IPv4 TCP 数据包,而这正是攻击者触发该漏洞所需要的。正常客户端(浏览器、SSH、手机、API、负载均衡器)从不会发送 IP 选项,因此真实流量不会受到影响。

首先检查服务器使用的是哪种防火墙工具:

systemctl is-active ufw nftables firewalld

如果 nftables 或 firewalld 处于 active 状态,重新加载该防火墙可能会清除此规则。请使用本步骤末尾的 nftables 变体,或根据你的环境进行调整。

安装临时方案。 它是一个小型 systemd 单元,因此每次重启后规则都会恢复:

sudo tee /etc/systemd/system/cve-2026-98432.service >/dev/null <<'EOF'
[Unit]
Description=Stopgap for CVE-2026-98432: drop IPv4 TCP packets carrying IP options
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/iptables -t raw -I PREROUTING -p tcp -m u32 --u32 "0>>24&0xF=6:15" -m comment --comment CVE-2026-98432 -j DROP
ExecStop=/usr/sbin/iptables -t raw -D PREROUTING -p tcp -m u32 --u32 "0>>24&0xF=6:15" -m comment --comment CVE-2026-98432 -j DROP
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload && sudo systemctl enable --now cve-2026-98432
sudo iptables -t raw -L PREROUTING -v -n

最后一条命令应列出一条带有注释 CVE-2026-98432 的 DROP 规则。pkts 列统计它拦截的数据包数量;该值应保持为 0 或接近 0。

u32 测试 0>>24&0xF=6:15 读取 IPv4 头部长度字段。正常头部为 5 × 4 = 20 字节。任何更长的值都意味着附加了选项,该数据包会被丢弃。该规则位于 raw 表中,而 ufw 不管理该表,因此你现有的防火墙规则不受影响。

继续之前请检查 SSH: 保持当前会话打开,并从第二个终端登录。然后加载你的网站。

要立即撤销:

sudo systemctl stop cve-2026-98432
“这条规则会阻止通过 IP 地址连接吗?” 不会。

每个数据包都有一个头部,其中携带源 IP 和目的 IP,连接正是依靠它来完成的。该规则会忽略这些地址。它只查找头部中很少使用的 options 扩展字段,该字段会使头部长度超过 20 字节。使用 ssh [email protected] 或 https://1.2.3.4 连接时,行为与之前完全一致。

可选:关闭 MPTCP(如果没有任何东西使用它)

如果第 1 步显示 MPTCP listeners: none,你可以关闭 MPTCP。在没有任何东西使用它时,这样做是无害的:

echo 'net.mptcp.enabled = 0' | sudo tee /etc/sysctl.d/99-disable-mptcp.conf
sudo sysctl -p /etc/sysctl.d/99-disable-mptcp.conf
适用于没有 iptables 或 u32 匹配功能的系统的 nftables 变体(此处未测试)
sudo nft add table ip cve98432
sudo nft add chain ip cve98432 pre '{ type filter hook prerouting priority -300; policy accept; }'
sudo nft add rule ip cve98432 pre ip protocol tcp ip hdrlength gt 5 counter drop
# undo: sudo nft delete table ip cve98432

此规则不会在重启后保留。如需持久生效,请将其添加到你的持久化 nftables 配置中。


步骤 3:重启(如果步骤 1 提示“需要重启”)

在 Ubuntu 上,重启目前还无法修复此 CVE,因为尚不存在已修复的内核。但它会加载已安装的最新内核,而该内核通常包含数月以来的其他安全修复。

重启之前:

  • 确认 SSH 可从第二个会话正常工作(步骤 2)。
  • 选择一个可以接受 1–2 分钟停机的时间点。
  • 数据库主库和副本: 逐个重启,切勿同时重启两者。
  • 长时间运行的服务器(数月或数年):在服务商面板中创建快照,准备好其 Web 控制台,并检查是否有人手动启动了一些东西。这些在重启后不会恢复:
    uptime -s; screen -ls; tmux ls
    systemctl list-units --type=service --state=running --no-legend | awk '{print $1}' | sort > /root/services-before.txt
    

然后:

sudo reboot

没有安装更新的内核,但内核版本很旧? 自动更新可能已关闭。用以下命令检查 sudo apt update && apt list --upgradable 2>/dev/null | grep -E '^linux-(generic|image)'。 如果有待安装的内核,请安装更新并保留现有配置文件: sudo apt -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade 然后重启。用以下命令重新开启自动更新: printf 'APT::Periodic::Update-Package-Lists "1";\nAPT::Periodic::Unattended-Upgrade "1";\n' | sudo tee /etc/apt/apt.conf.d/20auto-upgrades


第 4 步:重启之后

sudo ufw status verbose
uname -r
sudo iptables -t raw -L PREROUTING -v -n
systemctl --failed
检查项预期结果
ufw statusDefault: deny (incoming),仅允许你实际提供服务的端口(通常为 22、80、443)从 Anywhere 访问
uname -r步骤 1 中更新的内核版本
iptables …CVE-2026-98432 的 DROP 规则已存在
systemctl --failed0 loaded units listed

如果你在步骤 3 中保存了 services-before.txt,请将其与当前正在运行的服务进行对比。以 < 开头的行表示重启前运行、现在未运行的服务:

systemctl list-units --type=service --state=running --no-legend | awk '{print $1}' | sort | diff /root/services-before.txt -

MySQL 副本: 检查复制是否已恢复:

下载工具