CVE-2026-19444:kubectl cp 在 Windows 上路徑穿越可寫任意檔案
oss-security mailing list · 2026-09-28
在 Windows 上執行 kubectl cp 把容器內的檔案複製回本機時,只要來源容器裡的 tar執行檔內容不可信,它吐回的封裝資料在本機解壓縮階段就可能被寫到使用者指定目的地以外的任意路徑,寫入範圍只受限於執行 kubectl 的本機使用者權限,而不是原本以為的目的資料夾邊界。這個問題被編號為 CVE-2026-19444,於 2026 年 9 月 28 日由 Moriel Harush 揭露於 oss-security 郵件清單,CVSS 評分 6.5(中)。
漏洞機制
kubectl cp 從容器複製檔案的實作方式是:kubectl 在容器內執行 tar 把要複製的內容打包成封裝檔,透過網路把封裝檔傳回本機,再由 kubectl 在本機端把它解開寫入目的目錄。問題出在如果容器內的 tar 執行檔本身不可信(例如容器影像被竄改、或使用者原本就不完全信任該容器的內容),它可以任意產生封裝內容,而 kubectl 在 Windows 上解開這份封裝時未能正確限制寫入路徑,導致惡意封裝內容能被寫到目的目錄之外。
官方揭露文與對應的 Kubernetes GitHub issue #141294 都沒有公開具體的路徑繞過寫法(例如是否透過反斜線分隔符或磁碟代號繞過檢查),只確認這是 Windows 用戶端特有的問題:「Linux 與 macOS 的用戶端不受影響」。也就是說,同一個惡意容器如果用 Linux 或 macOS 上的 kubectl 去複製,並不會觸發這個路徑穿越。
受影響版本
受影響的是三條目前仍在維護的 kubectl release branch,只要是 Windows 平台上執行的 kubectl 用戶端,在下列版本範圍內都會中招:
| 分支 | 受影響版本 | 修補版本 |
|---|---|---|
| 1.34 | v1.34.0 – v1.34.11 | v1.34.12 以上 |
| 1.35 | v1.35.0 – v1.35.8 | v1.35.9 以上 |
| 1.36 | v1.36.0 – v1.36.4 | v1.36.5 以上 |
受影響條件很明確:在 Windows 上執行 kubectl,並用 kubectl cp 從一個內容不完全受你控制的容器複製檔案出來。用 Linux 或 macOS 的 kubectl 用戶端、或只從自己完全信任的容器複製檔案,都不在受影響範圍內。
修補與緩解
Kubernetes 專案已在 v1.34.12、v1.35.9、v1.36.5 三個版本修補此問題,揭露文與 GitHub issue 均未說明修補內部具體改了哪一段解壓縮邏輯,只確認升級到上述版本即可解決。在升級之前,官方建議的緩解方式是「只從你信任的容器複製檔案,或是在 Windows 上避免對不受信任的容器執行 kubectl cp」。
這次揭露由 Moriel Harush 回報,協調揭露流程則由 Marly Salazar、Maciej Szulik 與 Vyom Yadav 三人負責。對於在 CI/CD 或維運腳本裡會用 Windows 節點跑 kubectl cp 去把 pod 內產出的檔案(例如日誌、產物、除錯用 dump)複製回本機的團隊,應優先確認自己使用的 kubectl 版本是否落在受影響區間內,並排入升級排程,而不只是仰賴「反正容器都是自己建的」這種假設——因為只要容器的建置鏈有一環不完全可信,這個路徑穿越就可能被觸發。
原始來源:oss-security: CVE-2026-19444: kubectl cp path traversal on Windows、kubernetes/kubernetes issue #141294