CVE-2026-98432:Linux 内核 TCP 释放后重用漏洞,CVSS 9.8 但补丁覆盖极不均衡

一、漏洞定性

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 并对照发行版通告。

八、今晚的行动清单

  1. 先查发行版:Ubuntu 和 RHEL 用户暂时无补丁可打,需优先评估暴露面;Debian、Amazon Linux、AlmaLinux 测试仓库可立即行动。

  2. 再查 MPTCP :ss -Mlnp。有输出则最高优先级处理;Go 1.24+ 服务重点排查。

  3. 应用 nftables 缓解规则:在获得发行版补丁之前,Red Hat 规则是唯一有厂商背书的临时措施。规则在重启后失效,打上补丁后记得删除。

  4. 容器宿主机和 K8s 节点同样处理:容器共享宿主机内核,只更新容器镜像毫无意义。

  5. 关注发行商通告,而非上游版本号 :发行版回移植的版本号与上游完全不同,uname -r 显示 5.15.0-xxx 并不代表"版本够新"。

最后一句实话 :这个漏洞的 CVSS 9.8 很吓人,但 Anthropic 的可用利用程序需要 MPTCP 监听器作为前置条件。如果你确认 ss -Mlnp 为空,且没有 Go 1.24+ 编译的服务,紧迫性会显著下降。但 Ubuntu 和 RHEL 用户仍需跟进补丁进展------一旦发行版修复发布,应第一时间更新并重启。

相关推荐
逐流人34 分钟前
DevOps 入门实战(一):从 CI/CD 概念到 Jenkins 自动构建部署
运维·云原生·云计算·jenkins·devops
叼烟扛炮43 分钟前
Linux 学习笔记(六十一):网络编程毕业设计——Reactor 反应堆模式
linux·网络·笔记·学习·课程设计
xyzzklk1 小时前
变相解决华为Mate 8锁屏后无法建立入站网络连接
linux·运维·服务器·网络·华为·go·安卓
叼烟扛炮3 小时前
Linux 学习笔记(五十九):epoll 的生死抉择——LT 与 ET 模式
linux·运维·服务器·网络·笔记·学习·php
David猪大卫9 小时前
【Linux修炼】环境变量、进程地址空间
linux·c语言·经验分享·笔记·学习·ubuntu·centos
飞飞传输10 小时前
飞驰云联文件交换建设方法论:从单点传输到持续治理
大数据·运维·安全
叼烟扛炮10 小时前
Linux 学习笔记(五十六):IO 多路复用初探——select 的“三宗罪”
linux·服务器·数据库·笔记·学习·php
Ruiery11 小时前
Linux 6.6内核内存管理深度解析(十五):CMA 连续内存分配器
linux·运维·服务器
测试界的小码农11 小时前
【Linux 命令实战(01):认识 Linux 终端,从零掌握第一个命令】
linux·运维·服务器