一、漏洞定性
Linux 内核 IPv4 TCP 握手处理中存在一处释放后重用(UAF)漏洞。内核将 SYN 包中携带的 IP 选项从请求套接字传递给新连接时未做数据复制,连接断开后立即释放内存,而另一 CPU 核心可能仍在读取该内存以构建握手回复。攻击者无需任何凭证,在 TCP 握手阶段、应用层代码执行之前即可触发。
| 项 | 值 |
|---|---|
| 漏洞类型 | 释放后重用(UAF),IPv4 TCP 握手 |
| CVSS 3.1 | 9.8(内核 CNA 评定) |
| 利用前置 | 可达的 IPv4 TCP 监听器 + 携带 IP 选项的 SYN + 赢得竞争 |
| 影响起始 | Linux 4.4 |
| 在野利用 | 未确认(截至 10 月 31 日未列入 CISA KEV) |
Anthropic 披露,其 Claude 模型已针对启用了 MPTCP 监听器 的服务器编写出可用的远程 root 利用程序:先花 48 分钟泄露内核指针,再用 5 分钟执行任意命令。Go 安全团队随后指出,Go 1.24 起在 Linux 上默认创建 MPTCP 监听套接字,这意味着大量 Go 服务可能在不知情的情况下具备利用前置条件。
二、发行版修复状态:这是真正的问题所在
上游修复于 10 月 11 日至 15 日陆续进入稳定版内核(5.10.272 / 5.15.223 / 6.1.190 / 6.6.159 / 6.12.113 / 6.18.56 / 7.2.10 / 7.3)。但服务器跑的是发行版内核,不是上游内核。
| 发行版 | 状态(截至 10 月 31 日) | 修复版本/备注 |
|---|---|---|
| Debian 12/13 | 已修复 | 6.1.190-1 / 6.12.113-1 |
| Amazon Linux 2023 | 已修复 | kernel6.18、kernel6.12、默认 kernel 均已发布 |
| AlmaLinux 8/9/10 | 测试仓库 | kernel-4.18.0-553.180.2 / 5.14.0-687.61.2 / 6.12.0-211.69.2 |
| SUSE SLE 16 / 15 LTSS | 部分修复 | 16.0 及 15 SP4-SP6 已修复;15 SP7 进行中 |
| Oracle Linux (UEK) | 已修复 | 10 月 16 日发布勘误 |
| Ubuntu 全版本 | 未修复 | 22.04/24.04/26.04/26.10 标注"修复进行中",20.04 及更早仅"易受攻击" |
| RHEL 8/9/10 | 未修复 | Red Hat 已升级评级至 Critical(9.8),但无可用补丁;RHEL 6/7 不受影响 |
Red Hat 在 10 月 30 日将评级从 Important(8.1)紧急上调至 Critical(9.8),理由是"攻击几乎不受网络环境前提条件限制"。但同一份公告中,Red Hat 明确表示目前没有任何缓解措施能符合其产品安全标准。
三、关键判断:你的服务器到底有多危险
不是所有 Linux 服务器都同等危险。 区分两个层次:
第一层:存在 MPTCP 监听器的主机。 Anthropic 的可用利用程序以此为前置条件。检查方法:
bash
ss -Mlnp # 列出所有 MPTCP 监听套接字
sysctl net.mptcp.enabled # 1 表示允许
如果 ss -Mlnp 输出为空,说明当前没有 MPTCP 监听器。但注意:Go 1.24+ 编译的程序可能已经悄悄创建了 MPTCP 监听器 ,go.mod 中声明 go 1.24 即触发此默认行为。
第二层:所有接受 IPv4 TCP 连接的主机。 Red Hat 通告明确指出:"任何接受入站 TCP 连接的系统都处于直接风险之中"。Anthropic 的利用程序需要 MPTCP,但漏洞本身不限于 MPTCP,Go 安全团队也强调"这一底层漏洞并非 MPTCP 专属"。
四、临时缓解:Red Hat 官方 nftables 规则
在获得发行版补丁之前,Red Hat 建议在系统内核之前丢弃所有携带 IP 选项的入站 IPv4 TCP 数据包:
bash
# 保存为 cve-2026-98432.nft
table inet cve_2026_98432 {
chain input {
type filter hook input priority -310;
ip protocol tcp ip hdrlength > 5 counter drop
}
}
# 应用
sudo nft --check --file cve-2026-98432.nft
sudo nft --file cve-2026-98432.nft
ip hdrlength > 5 匹配头部长度超过 20 字节最小值的 IPv4 包,即携带 IP 选项的包。合法 TCP 通信极少使用 IPv4 选项,因此对正常服务影响很小。Red Hat 同时警告:此规则"可以显著降低暴露风险,但无法提供百分之百的保护"。
若不想使用 nftables,iptables 等效规则(需 xt_u32 模块):
bash
iptables -t raw -I PREROUTING -p tcp -m u32 --u32 "0>>24&0xF=6:15" -j DROP
注意:RHEL 9/10 及 Rocky/Alma 9/10 通常不包含 xt_u32 模块,应使用 nftables 规则。
五、若环境不需要 MPTCP,关闭它
这不能消除漏洞,但移除了 Anthropic 已公开利用程序的关键前置条件:
bash
echo 'net.mptcp.enabled = 0' | sudo tee /etc/sysctl.d/90-disable-mptcp.conf
sudo sysctl -w net.mptcp.enabled=0
sudo ss -Mlnp # 已存在的 MPTCP 监听器需重启相关服务才会消失
Go 安全团队认为为单个程序设置 GODEBUG=multipathtcp=0 是"一种脆弱的缓解方法",不建议依赖。
六、Python 检测脚本(安全版)
以下脚本仅做内核版本与 MPTCP 状态检查,不发送任何利用载荷。
python
#!/usr/bin/env python3
"""
CVE-2026-98432 安全检测(无利用载荷)
用法: sudo python3 cve_2026_98432_check.py
"""
import subprocess
import re
import sys
def run(cmd):
try:
return subprocess.check_output(cmd, shell=True, stderr=subprocess.DEVNULL, text=True).strip()
except Exception:
return ""
def check_kernel():
release = run("uname -r")
print(f"[*] 运行内核: {release}")
# 上游修复版本基线(仅用于自编译内核参考,发行版内核需查发行商通告)
fixed_baselines = {
"5.10": (272,), "5.15": (223,), "6.1": (190,),
"6.6": (159,), "6.12": (113,), "6.18": (56,),
"7.2": (10,), "7.3": (0,)
}
m = re.match(r"(\d+)\.(\d+)\.(\d+)", release)
if not m:
print("[!] 无法解析内核版本,请手动对照发行商通告")
return
major, minor, patch = int(m.group(1)), int(m.group(2)), int(m.group(3))
key = f"{major}.{minor}"
if key in fixed_baselines:
fixed_minor = fixed_baselines[key][0]
if patch >= fixed_minor:
print(f"[+] 内核版本不低于上游修复基线 {key}.{fixed_minor}(但发行版回移植需另行确认)")
else:
print(f"[!] 内核版本低于上游修复基线 {key}.{fixed_minor},可能受影响")
else:
print(f"[*] 内核分支 {key} 不在已知修复列表中,请查询发行商安全通告")
def check_mptcp():
enabled = run("sysctl -n net.mptcp.enabled 2>/dev/null")
print(f"[*] net.mptcp.enabled = {enabled or '未知'}")
listeners = run("ss -Mlnp 2>/dev/null")
if listeners:
print("[!] 检测到 MPTCP 监听套接字:")
print(listeners)
else:
print("[+] 当前无 MPTCP 监听套接字(但 Go 1.24+ 程序可能动态创建)")
def check_distro():
os_release = run("cat /etc/os-release 2>/dev/null")
name = re.search(r'^PRETTY_NAME="?([^"\n]+)', os_release, re.M)
if name:
print(f"[*] 发行版: {name.group(1)}")
print("[!] 请对照上文发行版状态表确认是否已获得修复内核")
if __name__ == "__main__":
if not sys.platform.startswith("linux"):
print("仅支持 Linux")
sys.exit(1)
print("=" * 50)
check_distro()
check_kernel()
check_mptcp()
print("=" * 50)
print("[*] 注意:容器内 uname -r 显示的是宿主机内核,请在宿主机执行本脚本。")
七、Nuclei 模板(安全指纹版)
保存为 cve-2026-98432-detect.yaml。不发送溢出载荷 ,仅通过 SSH 或本地执行做内核指纹识别(需提供凭据或使用 -code 模式)。
python
id: cve-2026-98432-detect
info:
name: CVE-2026-98432 Linux Kernel IPv4 TCP UAF - Safe Detection
author: security-research
severity: high
description: |
检测运行内核是否可能受 CVE-2026-98432 影响。仅做版本指纹与 MPTCP 状态检查,
不发送利用载荷,不触发漏洞。
reference:
- https://access.redhat.com/security/vulnerabilities/RHSB-2026-016
- https://atlasum.net/blog/cve-2026-98432-linux-ipv4-tcp-uaf
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cwe-id: CWE-416
tags: cve,cve2026,linux,kernel,tcp,detect
# 本模板为本地/远程执行模板(-code 模式),需 nuclei 启用 code 协议
code:
- engine:
- bash
args:
- "-c"
pattern: |
echo "KERNEL=$(uname -r)"
echo "DISTRO=$(grep PRETTY_NAME /etc/os-release 2>/dev/null | cut -d= -f2)"
echo "MPTCP_ENABLED=$(sysctl -n net.mptcp.enabled 2>/dev/null || echo unknown)"
echo "MPTCP_LISTENERS=$(ss -Mlnp 2>/dev/null | wc -l)"
matchers:
- type: regex
name: kernel
regex:
- "KERNEL=(.+)"
extractors:
- type: regex
part: output
regex:
- "KERNEL=(.+)"
- "DISTRO=(.+)"
- "MPTCP_ENABLED=(.+)"
- "MPTCP_LISTENERS=(.+)"
说明 :由于目标为 Linux 内核,Nuclei 无法通过网络远程探测该漏洞(需要系统级信息)。此模板设计为在目标主机本地或通过 SSH 执行,输出内核版本、发行版和 MPTCP 状态供人工研判。实际资产排查建议使用上文 Python 脚本,或直接执行 uname -r 并对照发行版通告。
八、今晚的行动清单
-
先查发行版:Ubuntu 和 RHEL 用户暂时无补丁可打,需优先评估暴露面;Debian、Amazon Linux、AlmaLinux 测试仓库可立即行动。
-
再查 MPTCP :
ss -Mlnp。有输出则最高优先级处理;Go 1.24+ 服务重点排查。 -
应用 nftables 缓解规则:在获得发行版补丁之前,Red Hat 规则是唯一有厂商背书的临时措施。规则在重启后失效,打上补丁后记得删除。
-
容器宿主机和 K8s 节点同样处理:容器共享宿主机内核,只更新容器镜像毫无意义。
-
关注发行商通告,而非上游版本号 :发行版回移植的版本号与上游完全不同,
uname -r显示 5.15.0-xxx 并不代表"版本够新"。
最后一句实话 :这个漏洞的 CVSS 9.8 很吓人,但 Anthropic 的可用利用程序需要 MPTCP 监听器作为前置条件。如果你确认 ss -Mlnp 为空,且没有 Go 1.24+ 编译的服务,紧迫性会显著下降。但 Ubuntu 和 RHEL 用户仍需跟进补丁进展------一旦发行版修复发布,应第一时间更新并重启。