全栈应用服务器

  • 全栈应用服务器 > 常见问题 > Linux 内核 MPTCP 漏洞(CVE-2026-98432)处置手册

    Linux 内核 MPTCP 漏洞(CVE-2026-98432)处置手册

    最近更新时间: 2026-11-12 17:11:55

    本文适用于使用 LAS 以下公共镜像创建的实例:Ubuntu 22.04、Ubuntu 24.04、CentOS Stream 9、Debian 11 和 Debian 12。

    CVE-2026-98432 影响 Linux 内核的 IPv4 TCP 连接处理。漏洞可能导致内核崩溃、内存破坏,在满足特定条件时可能造成远程代码执行。请优先升级到发行版已经发布修复的内核,并在升级后重启实例。

    确认当前状态

    在实例中执行:

    # 查看发行版和当前运行内核
    cat /etc/os-release
    uname -r
    
    # 查看 MPTCP 总开关;系统不支持该参数时会显示“未提供”
    sysctl -n net.mptcp.enabled 2>/dev/null || echo "net.mptcp.enabled 未提供"
    
    # 查看 MPTCP 监听套接字;ss 不支持 -M 时可能没有输出
    ss -Mln 2>/dev/null || true
    
    # 查看 IPv4 TCP 请求迁移开关
    sysctl -n net.ipv4.tcp_migrate_req 2>/dev/null || echo "tcp_migrate_req 未提供"
    

    处置方式

    1. 升级内核并重启。(推荐)
    2. 关闭 MPTCP 和 TCP 请求迁移,处理已有监听,并限制不必要的 TCP 访问。
    3. 配置 iptables 报文过滤,丢弃带 IPv4 选项的 TCP 报文和带 MPTCP 选项的 SYN 报文,并配置开机恢复。

    方式 2~3 只作为临时可选的防护办法,不能替代内核补丁修复。

    处置步骤 1:升级内核并重启

    Ubuntu 22.04/24.04 内核升级

    升级前请创建实例快照,升级完成后需要重启实例。

    1. 以 root 用户登录,执行:
    set -e
    
    # 更新软件包索引并升级内核
    apt-get update
    apt-get install --only-upgrade -y linux-image-virtual
    
    1. 重启实例:
    reboot
    
    1. 实例恢复后检查:
    uname -r
    

    Ubuntu 22.04 应显示 5.15.0-203-generic 或更新版本;Ubuntu 24.04 应显示 6.8.0-149-generic 或更新版本,即表示升级成功。

    旧内核会保留。如新内核无法启动,请通过控制台进入 GRUB 的高级选项,选择旧内核启动。

    CentOS Stream 9 内核升级

    升级前请创建实例快照,升级完成后需要重启实例。

    1. 以 root 用户登录,执行:
    set -e
    
    # 刷新软件包索引并升级内核
    dnf --refresh upgrade -y kernel kernel-core kernel-modules
    
    1. 重启实例:
    reboot
    
    1. 实例恢复后检查:
    uname -r
    

    显示 5.14.0-763.el9.x86_64 或更新版本,即表示升级成功。

    旧内核会保留。如新内核无法启动,请通过控制台进入 GRUB,选择旧内核启动。

    Debian 11 内核补丁

    升级前请创建实例快照,升级完成后需要重启实例。

    1. 以 root 用户登录,执行:
    set -e
    
    # 下载修复内核
    curl -fL --retry 3 \
      https://kodo-toolbox.qiniu.com/las/deb/debian-5.10.274_amd64.deb \
      -o /tmp/debian-5.10.274_amd64.deb
    
    # 安装内核并更新启动项
    dpkg -i /tmp/debian-5.10.274_amd64.deb
    update-grub
    
    1. 重启实例:
    reboot
    
    1. 实例恢复后检查:
    uname -r
    

    显示以下版本即表示升级成功:

    5.10.274-bullseye-local
    

    旧内核会保留。如新内核无法启动,请通过控制台进入 GRUB 的高级选项,选择旧内核启动。

    Debian 12 内核升级

    升级前请创建实例快照,升级完成后需要重启实例。

    1. 以 root 用户登录,普通系统镜像执行:
    set -e
    
    # 更新软件包索引并升级 cloud 内核
    apt-get update
    apt-get install --only-upgrade -y linux-image-cloud-amd64
    

    桌面镜像将上述 linux-image-cloud-amd64 替换为 linux-image-amd64。

    1. 重启实例:
    reboot
    
    1. Debian 执行 uname -r 查看的是内核 ABI 版本。请执行以下命令,确认当前运行内核对应的软件包版本:
    dpkg-query -W -f='${Version}\n' "linux-image-$(uname -r)"
    

    显示 6.1.190-1 或更新版本,即表示升级成功。

    旧内核会保留。如新内核无法启动,请通过控制台进入 GRUB 的高级选项,选择旧内核启动。

    处置步骤 2:关闭 MPTCP 和 TCP 请求迁移

    在无法立即升级时,可采取以下措施降低风险,但不能替代补丁:

    1. 关闭 MPTCP:sysctl -w net.mptcp.enabled=0;Go 程序可设置环境变量 GODEBUG=multipathtcp=0,或在 main 模块 go.mod 中加入 godebug multipathtcp=0,或改用 net.ListenConfig.SetMultipathTCP(false)。

      强调:关闭内核 MPTCP 开关只影响后续创建的 socket,已有 MPTCP 监听和连接不会自动清除,需重启对应服务、断开已有连接。如果服务显式创建 MPTCP socket,重启后可能启动失败。

      环境变量需写入服务或容器的启动配置,并保留已有的其他 GODEBUG 选项;修改后重启服务。go.mod 或代码变更需重新构建发布。

    2. 执行 sysctl -w net.ipv4.tcp_migrate_req=0,并用 bpftool prog list 排查、移除 sk_reuseport 类型的 BPF 迁移程序,以关闭第二条路径;同步修改其启动配置,避免重启后重新加载。

    3. 清理不必要的 setsockopt(IP_OPTIONS) 用法。

    4. 收敛暴露面:对非必要对外开放的 TCP 服务实施访问控制,优先保护 Web、SSH、数据库与代理等互联网可达服务,并将规则保存在安全组或现有防火墙配置中。

    内核参数持久化:以 root 执行以下命令,保存上述两个参数并立即生效,确保重启后仍然生效:

    set -e
    
    # 仅配置当前内核支持的参数,并立即生效
    : > /etc/sysctl.d/99-cve-2026-98432.conf
    for key in net.mptcp.enabled net.ipv4.tcp_migrate_req; do
      if sysctl -n "$key" >/dev/null 2>&1; then
        printf '%s = 0\n' "$key" >> /etc/sysctl.d/99-cve-2026-98432.conf
        sysctl -w "$key=0"
      fi
    done
    
    # 确认参数为 0;当前内核不支持的参数会显示“未提供”
    sysctl -n net.mptcp.enabled 2>/dev/null || echo "net.mptcp.enabled 未提供"
    sysctl -n net.ipv4.tcp_migrate_req 2>/dev/null || echo "tcp_migrate_req 未提供"
    

    支持的参数应显示为 0,重启后再次查询确认。

    处置步骤 3:配置 iptables 报文过滤

    本方案通过 iptables 丢弃带 IPv4 选项的 TCP 报文和带 MPTCP 选项的 SYN 报文,不影响普通 TCP 选项。
    请以 root 用户登录实例,并配合处置步骤 2操作。

    重要:如果业务使用 IPv4 选项或 MPTCP,请先在测试环境验证,确认业务正常后再应用到生产环境。

    根据实例的操作系统,执行对应命令安装 iptables:

    # Ubuntu、Debian
    apt-get update
    apt-get install -y iptables
    
    # CentOS Stream 9
    dnf install -y iptables
    

    执行以下命令,创建过滤脚本并设置开机自动加载。如果实例中已存在同名规则链、脚本或服务,请先确认是否已配置本方案。

    set -e
    
    # 加载 xt_u32 模块,并设置开机自动加载
    modprobe xt_u32
    printf '%s\n' xt_u32 > /etc/modules-load.d/cve-2026-98432.conf
    
    # 创建可重复执行的规则脚本,不清空其他防火墙规则
    cat > /usr/local/sbin/cve-2026-98432-iptables.sh <<'SCRIPT'
    #!/usr/bin/env bash
    set -euo pipefail
    CHAIN=CVE-2026-98432
    ipt() { iptables -w 5 -t raw "$@"; }
    
    # 只创建专用链和缺失规则,不清空已有防火墙规则。
    if ! ipt -S "$CHAIN" >/dev/null 2>&1; then
      ipt -N "$CHAIN"
    fi
    ipt -C "$CHAIN" -p tcp --tcp-flags SYN,ACK SYN -m tcp --tcp-option 30 -j DROP 2>/dev/null ||
      ipt -I "$CHAIN" 1 -p tcp --tcp-flags SYN,ACK SYN -m tcp --tcp-option 30 -j DROP
    ipt -C "$CHAIN" -p tcp -m u32 --u32 '0&0x0F000000=0x06000000:0x0F000000' -j DROP 2>/dev/null ||
      ipt -I "$CHAIN" 1 -p tcp -m u32 --u32 '0&0x0F000000=0x06000000:0x0F000000' -j DROP
    ipt -C "$CHAIN" -j RETURN 2>/dev/null || ipt -A "$CHAIN" -j RETURN
    
    # 先准备完整链,再接入入站路径。
    ipt -C PREROUTING -p tcp -j "$CHAIN" 2>/dev/null ||
      ipt -I PREROUTING 1 -p tcp -j "$CHAIN"
    SCRIPT
    chmod 0750 /usr/local/sbin/cve-2026-98432-iptables.sh
    
    # 创建开机恢复服务
    cat > /etc/systemd/system/cve-2026-98432-mitigation.service <<'UNIT'
    [Unit]
    Description=CVE-2026-98432 temporary packet filtering
    Wants=network-pre.target
    After=network-pre.target systemd-modules-load.service iptables.service nftables.service netfilter-persistent.service firewalld.service
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/local/sbin/cve-2026-98432-iptables.sh
    ExecReload=/usr/local/sbin/cve-2026-98432-iptables.sh
    
    [Install]
    WantedBy=multi-user.target
    UNIT
    
    # 启用开机恢复并立即应用
    systemctl daemon-reload
    systemctl enable cve-2026-98432-mitigation.service
    systemctl restart cve-2026-98432-mitigation.service
    

    执行以下命令,检查服务和规则是否生效。实例重启后,请再次检查。

    # 应显示 enabled,存在跳转规则及两条 DROP 规则
    systemctl is-enabled cve-2026-98432-mitigation.service
    iptables -t raw -C PREROUTING -p tcp -j CVE-2026-98432
    iptables -t raw -L CVE-2026-98432 -n -v -x
    

    服务状态应为 enabled,跳转规则检查无报错,规则列表中应包含两条 DROP 规则。配置完成后,请确认 SSH 和业务访问正常。

    说明:重载防火墙后,请重新检查规则。如果规则丢失,执行 systemctl restart cve-2026-98432-mitigation.service 恢复。
    已有 MPTCP 监听仍需按步骤 2 重启对应服务。本方案仅过滤经过实例 iptables 的报文;如需保护容器或 Pod,请在其网络环境中单独验证规则是否生效。

    以上内容是否对您有帮助?