CVE-2025-23266修复方案

NVIDIA Container Toolkit 1.17.7及以下版本在使用默认配置时存在一个TOCTOU竞态条件攻击漏洞。该漏洞不会影响容器设备接口(CDI)的使用,但若被成功利用,可能导致容器逃逸,使攻击者能够在宿主机上执行任意命令或获取敏感信息。已知攻击场景下,受害者需要使用恶意镜像,并在容器内通过NVIDIA Container Toolkit操作GPU资源。关于漏洞的详细信息,请参见NVIDIA Container Toolkit,请及时修复。

影响范围

当您的集群同时满足以下两项条件时,将会被此漏洞影响,建议您及时修复:

  1. 集群 Kubernetes 版本 ≤ 1.32。

  2. GPU 节点安装的 NVIDIA Container Toolkit 版本 ≤ 1.17.7。

如何查询 NVIDIA Container Toolkit 组件版本

  1. 登录 GPU 节点。

  2. 您可执行nvidia-container-cli --version查看组件版本,以下是一个示例输出。

    cli-version: 1.17.8
    lib-version: 1.17.8
    build date: 2025-05-30T13:47+00:00
    build revision: 6eda4d76c8c5f8fc174e4abca83e513fb4dd63b0
    build compiler: x86_64-linux-gnu-gcc-7 7.5.0
    build platform: x86_64

防范措施

启用安全策略管理中的容器安全策略规则库说明策略,限制仅从可信的镜像仓库中拉取镜像。

解决方案

新建GPU节点

  • 20250804日及以后创建的节点:ACK Edge集群已在1.20及以上版本的集群中发布了NVIDIA Container Toolkit v1.17.8,可自动完成修复。您可以新建节点,正常使用。

  • 如果您的当前集群版本低于 1.20,建议您及时升级版本,请参见升级集群

存量GPU节点

20250804日之前创建的存量GPU节点,均需通过执行CVE修复脚本进行手动修复。

重要

为确保系统稳定性,建议将节点分批次修复,避免一次性同时处理全部节点。

步骤一:节点排水

节点排水将把该节点上的 Pod 迁移到其他可用节点。执行前,请您先确认所选节点确为目标边缘节点。

  1. 执行以下命令,设置指定的节点为不可调度状态。

    kubectl cordon <NODE_NAME>
  2. 执行以下命令,进行节点排水操作。

    kubectl drain <NODE_NAME> --grace-period=120 --ignore-daemonsets=true

步骤二:节点上执行修复脚本

针对受影响的节点,需在节点上执行以下脚本。

  1. 根据实际环境执行以下命令,为脚本配置 REGIONINTERCONNECT_MODE两个环境变量。

    export REGION="cn-hangzhou"  INTERCONNECT_MODE="basic";  # 将 “cn-hangzhou” 和 “basic” 替换为您的真实配置。

    参数说明:

    参数

    说明

    示例值

    REGION

    指定集群所在地域的Region ID。ACK Edge集群支持的地域及其Region ID,请参见开服地域

    cn-hangzhou

    INTERCONNECT_MODE

    指定节点接入的网络类型。

    • basic:公网接入。

    • private:专线接入。

    basic

  2. 使用以下脚本复制到终端并执行,以完成修复操作。

    #!/bin/bash
    set -e
    
    if [[ $REGION == "" ]];then
        echo "Error: REGION is null"
        exit 1
    fi
    
    if [[ $INTERCONNECT_MODE == "" ]]; then
       echo "Error: INTERCONNECT_MODE is null"
       exit 1
    fi
    
    NV_TOOLKIT_VERSION=1.17.8
    
    INTERNAL=$( [ "$INTERCONNECT_MODE" = "private" ] && echo "-internal" || echo "" )
    PACKAGE=upgrade_nvidia-container-toolkit-${NV_TOOLKIT_VERSION}.tar.gz
    
    cd /tmp
    
    export PKG_URL_PREFIX="http://aliacs-k8s-${REGION}.oss-${REGION}${INTERNAL}.aliyuncs.com"
    curl -o ${PACKAGE}  ${PKG_URL_PREFIX}/public/pkg/nvidia-container-runtime/${PACKAGE} 
    
    tar -xf ${PACKAGE} 
    
    cd pkg/nvidia-container-runtime/upgrade/common
    
    bash upgrade-nvidia-container-toolkit.sh
    
  3. 查看输出结果。

    • 如果脚本输出如下内容,表明当前节点环境不存在CVE漏洞,机器上未执行任何变更,可忽略。

      2025-03-22/xxxx  INFO  No need to upgrade current nvidia-container-toolkit(1.17.8)
    • 如果脚本输出如下内容,那么表示该节点环境存在NVIDIA Container Toolkit漏洞且已被修复。

      2025-03-22/xxxxx  INFO  succeed to upgrade nvidia container toolkit

步骤三:节点上线

执行以下命令,进行节点上线操作。

kubectl uncordon <NODE_NAME>

步骤四:验证GPU节点正常工作(可选)

完成修复后,您可以使用以下文档的示例 YAML 部署一个 GPU 工作负载,确认节点状态正常。