CVE-2026-98432:Linux 内核 TCP 释放后重用漏洞,CVSS 9.8 但补丁覆盖极不均衡-C博
原创
mourenzheng
mourenzheng
网络安全民工
2026年11月1日 15:25
天津
标题已修改
去阅读
一、漏洞定性
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 的可用利用程序以此为前置条件。检查方法:
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 数据包:
# 保存为 cve-2026-98432.nfttable 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.nftsudo nft --file cve-2026-98432.nft
ip hdrlength > 5 匹配头部长度超过 20 字节最小值的 IPv4 包,即携带 IP 选项的包。合法 TCP 通信极少使用 IPv4 选项,因此对正常服务影响很小。Red Hat 同时警告:此规则“可以显著降低暴露风险,但无法提供百分之百的保护”。
若不想使用 nftables,iptables 等效规则(需 xt_u32 模块):
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 已公开利用程序的关键前置条件:
echo 'net.mptcp.enabled = 0' | sudo tee /etc/sysctl.d/90-disable-mptcp.confsudo sysctl -w net.mptcp.enabled=0sudo ss -Mlnp # 已存在的 MPTCP 监听器需重启相关服务才会消失
Go 安全团队认为为单个程序设置 GODEBUG=multipathtcp=0 是“一种脆弱的缓解方法”,不建议依赖。
六、 Python 检测脚本(安全版)
以下脚本仅做内核版本与 MPTCP 状态检查,不发送任何利用载荷。
#!/usr/bin/env python3\"\"\"CVE-2026-98432 安全检测(无利用载荷)用法: sudo python3 cve_2026_98432_check.py\"\"\"import subprocessimport reimport 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=\"?([^\"\
]+)', 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 模式)。
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 用户仍需跟进补丁进展——一旦发行版修复发布,应第一时间更新并重启。
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论