
突破容器隔離:NVIDIA AI 安全風險揭示
這篇 Wiz 部落格 文章深入探討了 CVE-2024-0132,這是 NVIDIA Container Toolkit 中發現的一個嚴重漏洞,它會影響雲端服務提供者並允許攻擊者跳脫容器隔離 (escape container isolation) 並獲得對底層主機的完全存取權。文章詳細介紹了 Wiz Research 如何發現該漏洞、漏洞攻擊的技術方面以及它對 Docker 和 gVisor 等環境的潛在影響。它強調了更新到最新版本的 NVIDIA Container Toolkit (1.17.4) 以降低風險的重要性,並強調了僅依賴容器作為安全屏障的危險,並建議採用虛擬化等縱深防禦策略。
本文對 NVIDIA Container Toolkit 中發現的 CVE-2024-0132 漏洞進行了詳細的技術分析,該工具包被廣泛用於為容器化的 AI 應用程式 提供對 GPU 資源 的存取。該漏洞允許控制容器映像的攻擊者逃脫容器的隔離並獲得對底層主機的完全存取權。文章強調,這對敏感資料和基礎設施構成了重大風險。
以下是該漏洞的關鍵技術方面的分析:

漏洞摘要
此漏洞允許 惡意攻擊者 (Malicious actor) 將主機的 root filesystem 掛載到容器中,從而授予對主機所有檔案的不受限制訪問權限,包括對主機 容器運行時 Unix Socket 的存取,使攻擊者可啟動特權容器並實現完全主機入侵。
受影響的元件
該漏洞存在於 NVIDIA Container Toolkit,影響多個容器執行時,例如 Docker、Containerd (Kubernetes) 和 CRI-O。
工具包的工作原理
NVIDIA 容器工具包修改 Docker 守護程式設定 (Docker daemon configuration),將自身設定為預設容器執行時間。當使用者執行 docker run
時,Docker 會呼叫 nvidia-container-runtime 二進位檔案,它會修改容器定義以新增 Prestart Hook,然後再傳遞給系統的 runc。接著,nvidia-container-runtime-hook 使用 nvidia-container-cli 安裝裝置、函式庫和二進位檔案到容器程序中。
攻擊面
在 nvidia-container-runtime-hook 執行期間,容器處於早期初始化階段,這表示關鍵的安全控制尚未生效,使攻擊者可以操縱容器檔案系統上的檔案和設定。
TOC/TOU 漏洞
libnvidia-container 在掛載檔案到容器的方式上存在 檢查時間/使用時間 (Time of Check/Time of Use, TOC/TOU) 漏洞,攻擊者可誘騙其在容器內掛載來自主機的目錄,進而導致容器跳脫。
安裝機制
nvidia-container-cli 中的 nvc_driver_mount
函數將資源從主機安裝到容器,並操縱檔案系統來實現攻擊。
漏洞詳情
- 掛載的來源路徑 cnt->libs 在初始化期間由 find_library_paths 設置,它使用 glob 搜尋與模式 /usr/local/cuda/compat/lib*.so.* 匹配的路徑。
- 沒有檢查以確保 xglob 返回的路徑是常一般檔案(Regular files),從而允許攻擊者植入目錄。
- 此函數呼叫 path_resolve,它會依照符號連結和點點 (..) 條目傳回絕對路徑。
- 攻擊者可以在掛載操作之間操縱檔案系統佈局。
漏洞攻擊步驟
- 1. 容器從/usr/local/cuda/compat/中的特定目錄結構啟動。
- 2. libnvidia-ml.so.6 是一個目錄,而 libnvidia-ml.so.7 是一個指向容器檔案系統外部的符號連結。
- 3. 在 mount_files 的第一次執行(First iteration)期間,libnvidia-ml.so.6 被掛載到 /usr/lib64/libnvidia-ml.so.6。此目標路徑被植入為指向 /usr/local/cuda/compat/ 的符號鏈接,有效替換其內容。
- 4. 在第二次執行時(Second iteration),函數嘗試掛載 /usr/local/cuda/compat/libnvidia-ml.so.7。但是,由於前面的步驟,libnvidia-ml.so.7 現在是一個指向HostFilesystem根目錄的符號連結。
- 5. 核心(Kernel)將主機的根檔案系統掛載到容器內的 /usr/lib64/libnvidia-ml.so.7 中,從而打破容器隔離。
權限提升
Host Filesystem以唯讀方式安裝,但攻擊者仍可與 Unix Socket互動。透過開啟主機的 docker.sock,攻擊者可以產生新的特權容器,從而獲得對Host Filesystem的不受限制的存取權限。
對 gVisor 的影響
漏洞也會影響 gVisor,可能會導致容器rm跳脫,儘管權限提升可能需要在某些 Linux 發行版上進行調整。
緩解措施
NVIDIA Container Toolkit 1.17.4 版本已解決此問題,建議使用者更新至最新版本,並且不要在生產環境中停用 --no-cntlibs 標誌。
總結
文章的結論是,容器安全具有挑戰性,一個被忽略的細節都可能帶來嚴重的安全隱憂。他們建議應用程序,特別是多租戶(multi-tenant)應用程式,應該“假設存在漏洞”並確保至少有一個強大的隔離屏障。