全部產品
Search
文件中心

Container Service for Kubernetes:漏洞CVE-2025-23266公告

更新時間:Aug 01, 2025

NVIDIA Container Toolkit 1.17.7及以下版本在使用預設配置時存在一個TOCTOU競態條件攻擊漏洞。該漏洞不會影響容器裝置介面(CDI)的使用,但若被成功利用,可能導致容器逃逸,使攻擊者能夠在宿主機上執行任意命令或擷取敏感資訊。已知攻擊情境下,受害者需要使用惡意鏡像,並在容器內通過NVIDIA Container Toolkit操作GPU資源。

關於漏洞的詳細資料,請參見NVIDIA Container Toolkit,請及時修複。

影響範圍

叢集版本低於1.32,且叢集中GPU節點安裝了版本為1.17.7及以下的NVIDIA Container Toolkit組件。

如何查看組件版本

您可執行以下命令查看組件版本。

nvidia-container-cli --version

以下為1.17.8版本的預期輸出:

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

防範措施

在漏洞未修複之前,建議避免在叢集中運行不可信的容器鏡像,以確保系統的安全性和穩定性。可參見以下兩種方案。

解決方案

注意事項

  • 修複方案僅適用於ACK託管叢集Pro版ACK託管叢集基礎版ACK專有叢集ACK Edge叢集的雲端節點池和ACK靈駿叢集的託管節點池。

  • 如果您的叢集類型為ACK靈駿叢集,且節點池為靈駿節點池,請提交工單處理。

  • 在修複過程中,請分批進行節點修複操作,避免同時修複所有節點,以確保系統穩定性。

  • 整個過程會通過重啟節點上正在啟動並執行業務Pod對其進行修複,請選擇業務低峰期進行修複操作。

修複方案

新增GPU節點配置方案

本方案僅適用於1.20及以上版本的叢集。若您叢集版本低於1.20,請及時升級叢集

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點池

  3. 找到對應節點池,單擊編輯,為節點池添加ack.aliyun.com/nvidia-container-runtime-version=1.17.8標籤後,單擊確認

    說明
    • 該標籤將鎖定節點池擴容時使用的nvidia-container-toolkit版本為1.17.8,後續發布新版本時不會自動升級。

    • 若需使用新版本nvidia-container-toolkit,需手動刪除該標籤,擴容節點將預設採用最新版本。

存量GPU節點修複方案

對於存量GPU節點情境,可以通過執行CVE修複指令碼,進行手動修複。修複方案詳情如下。

展開查看手動修複方案

前提條件

  • 確認操作的阿里雲帳號或RAM使用者擁有系統營運管理(OOS)的操作許可權AliyunOOSFullAccess

  • 確認叢集是否安裝cGPU模組。如未安裝,可直接從步驟1:節點排水開始執行操作。如已安裝,請確保其版本為1.1.0及以上。

    展開查看如何確認叢集是否安裝cGPU模組及如何升級

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > Helm

    3. Helm詳情頁面,查看組件版本。

      • 不存在ack-cgpu:表明未安裝cGPU模組。

      • 同時存在ack-ai-installerack-cgpu提交工單處理。

      • 存在ack-ai-installer:若組件版本為1.7.5以下,請升級ack-ai-installer組件。相關操作,請參見升級共用GPU調度組件

      • 存在ack-cgpu:若版本為1.5.1以下,請單擊組件右側更新,按照頁面指引完成組件的升級。

    4. 相關組件升級完成後,針對叢集中存量cGPU節點,請參見升級節點cGPU版本

步驟1:節點排水

控制台
  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點

  3. 節點頁面中勾選目標節點並單擊最下方節點排水,在彈出框中單擊確定

kubectl
  1. 執行以下命令,設定指定的節點為不可調度狀態。

    kubectl cordon <NODE_NAME>
  2. 執行以下命令,進行節點排水操作。

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

步驟2:節點上執行修複指令碼

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點

  3. 節點頁面中勾選目標節點並單擊最下方批量營運,在彈出框中選中執行 Shell 命令單擊確定

  4. 在彈出系統營運管理(OOS)基本資料頁簽中,參見如下表格進行配置,然後單擊下一步:設定參數

    配置項

    參數

    模板類別

    公用工作範本

    模板選擇

    ACS-ECS-BulkyRunCommand

    執行模式

    失敗暫停

  5. 設定參數頁簽中單擊運行Shell指令碼,並將如下CVE修複指令碼放入命令內容中,單擊下一步:確定

    #!/bin/bash
    set -e
    # 設定節點所在的region
    export REGION=$(curl 100.100.100.200/latest/meta-data/region-id 2>/dev/null)
    
    if [[ $REGION == "" ]];then
        echo "Error: failed to get region"
        exit 1
    fi
    
    NV_TOOLKIT_VERSION=1.17.8
    
    PACKAGE=upgrade_nvidia-container-toolkit-${NV_TOOLKIT_VERSION}.tar.gz
    
    cd /tmp
    
    curl -o ${PACKAGE}  http://aliacs-k8s-${REGION}.oss-${REGION}-internal.aliyuncs.com/public/pkg/nvidia-container-runtime/${PACKAGE} 
    
    tar -xf ${PACKAGE} 
    
    cd pkg/nvidia-container-runtime/upgrade/common
    
    bash upgrade-nvidia-container-toolkit.sh
  6. 確定頁簽中核對建立資訊,確認無誤後單擊建立

  7. 任務執行成功後,在系統營運管理主控台左側導覽列,選擇自動化任務 > 任務執行管理,找到並單擊對應任務執行ID。然後在執行步驟和結果地區查看輸出

    • 如果指令碼輸出如下內容,當前節點環境不存在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

步驟3:節點設定為可調度

控制台

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點

  3. 節點頁面中勾選目標節點並單擊最下方設定調度狀態,在彈出框選中設定為可調度,然後單擊確定

kubectl

執行以下命令,進行節點接觸隔離操作。

kubectl uncordon <NODE_NAME>

(可選)步驟4:驗證GPU節點

完成上述操作以後,建議參考如下文檔中的樣本YAML部署一個GPU應用,驗證節點是否能夠正常工作。