デフォルト構成で使用する場合、NVIDIA Container Toolkit バージョン 1.17.7 以前には、Time-of-check to Time-of-use(TOCTOU)競合状態の脆弱性が存在します。この脆弱性は、Container Device Interface(CDI)を使用するデプロイメントには影響しません。ただし、悪用された場合、この脆弱性によりコンテナエスケープが発生し、攻撃者がホスト上で任意のコマンドを実行したり、機密性の高いホストシステム情報にアクセスしたりする可能性があります。既知の攻撃シナリオでは、悪意のあるコンテナイメージを実行し、NVIDIA Container Toolkit を介してコンテナ内で GPU リソースを使用する必要があります。影響を受けるクラスターには、即時の修復が必要です。
公式の詳細については、「NVIDIA Container Toolkit」をご参照ください。
影響を受ける範囲
以下の両方の条件が満たされる場合、クラスターは影響を受けます。
Kubernetes のバージョンが 1.32 以前である。
少なくとも 1 つの GPU アクセラレーションノードで、NVIDIA Container Toolkit バージョン 1.17.7 以前が実行されている。
NVIDIA Container Toolkit のバージョンの確認
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 アクセラレーションノード
ACK エッジクラスター(Kubernetes 1.20 以降)
2025 年 8 月 4 日以降に作成されたノードには、NVIDIA Container Toolkit のパッチ適用済みバージョン(V1.17.8)が自動的にインストールされます。
それ以上の操作は必要ありません。
Kubernetes バージョンが 1.20 より前のクラスター
パッチ適用済みバージョンが確実に適用されるように、新しいノードを作成する前にクラスターをアップグレードする必要があります。
手順については、「クラスターのアップグレード」をご参照ください。
既存の GPU アクセラレーションノード
2025 年 8 月 4 日より前に作成されたすべての既存の GPU アクセラレーションノードでは、手動による修正が必要です。
クラウドノードの場合は、「脆弱性 CVE-2025-23266」をご参照ください。
エッジノードの場合は、以下の手順に従います。
システムの安定性を確保するために、修正プログラムはバッチで適用してください。
エッジノードの手動修正手順
手順 1:ノードをドレインする
ノードをドレインして、ワークロードを他の使用可能なノードに安全に移行します。開始する前に、正しいターゲットエッジノードを選択したことを確認してください。
ノードをスケジューリング不可としてマークします。
kubectl cordon <NODE_NAME>ノードをドレインします。
kubectl drain <NODE_NAME> --grace-period=120 --ignore-daemonsets=true
手順 2:修正スクリプトを適用する
影響を受けるノードにログオンし、次のスクリプトを実行します。
必要な環境変数
REGIONとINTERCONNECT_MODEを設定します。例の値を実際の構成に置き換えます。export REGION="cn-hangzhou" INTERCONNECT_MODE="basic"; # "cn-hangzhou" と "basic" を実際の構成に置き換えます。// Replace "cn-hangzhou" and "basic" with your actual configurations.パラメータリファレンス:
パラメータ
説明
例
REGION
ACK Edge クラスターのリージョン ID。詳細については、「サポートされているリージョン」をご参照ください。
cn-hangzhouINTERCONNECT_MODE
ネットワークアクセスタイプ:
basic:インターネットアクセス。private:専用線アクセス。
basic修正スクリプトを実行します。
#!/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修正を確認します。
次の出力が表示された場合、ノードは脆弱ではなく、変更は行われませんでした。
2025-03-22/xxxx INFO No need to upgrade current nvidia-container-toolkit(1.17.8) // 現在の nvidia-container-toolkit(1.17.8) をアップグレードする必要はありません。次の出力が表示された場合、ノードは脆弱であり、パッチが適用されました。
2025-03-22/xxxxx INFO succeed to upgrade nvidia container toolkit // nvidia container toolkit のアップグレードに成功しました。
手順 3:ノードを再度有効にする
ノードのスケジューリングステータスを復元します。
kubectl uncordon <NODE_NAME>手順 4(オプション):ノードをテストする
修正を適用した後、GPU ワークロードをデプロイして、ノードが正しく機能していることを確認します。次のサンプル YAML テンプレートを使用します。
排他的 GPU:「デフォルトの GPU スケジューリングモードを使用する」をご参照ください。
共有 GPU:「GPU 共有を使用して GPU を共有する例」をご参照ください。