k8s kubectl複製命令曝目錄遍歷漏洞
Twistlock 的安全研究人員 Ariel Zelivansky 披露了 Kubernetes kubectl 複製命令的一個目錄遍歷漏洞。
出現漏洞的是命令 kubectl cp,該命令允許在容器和用戶計算機之間複製文件。要從容器中複製文件,Kubernetes 調用容器內的`tar`二進制文件,以創建或解壓 tar 包。
對 tar 的操作依賴於 CMD/CP/cp.go,其中的函數`copyFromPod`實現了從容器中複製文件的過程,它通過遠程 exec(`&exec.DefaultRemoteExecutor`)調用容器中的 tar,然後在函數`untarAll`中解壓用戶機器上的結果。此函數使用“archive/tar” Go 包根據結果 tar 頭進行 tar 解析,最後將文件寫入目標目錄。
這個過程中,如果容器上的`tar`二進制文件是惡意的,那麼它可以運行任意代碼並輸出惡意結果,這將最終導致典型的目錄遍歷攻擊,允許惡意容器在複製時將任何文件寫入用戶計算機上的任何路徑。
雖然此前已經引入了`cp.go:clean`函數來避免這個目錄遍歷,但是 Ariel 發現其實可以創建和跟蹤來自 tar 頭的符號鏈接,攻擊者可以製作一個惡意 tar,其中包含一個帶有幾乎任何路徑的符號鏈接的頭,以及一個與符號鏈接同名的目錄內文件的後續頭。當通過 cp untar 函數提取時,鏈接將導致在符號鏈接的路徑中創建或修改所需文件。
攻擊者可能會採用以下方式利用該漏洞:
- 用戶在不知情的情況下下載帶有錯誤 tar 的惡意容器鏡像,攻擊者可以將這樣的鏡像推送到任何註冊表(例如 Docker Hub),以獲得他控制或依賴於域名仿冒的流行鏡像。
- 攻擊者利用另一個漏洞攻擊正在運行的容器,或者在某些情況下,他可能擁有對容器的合法訪問權限。然後攻擊者植入惡意 tar 替換鏡像中的原始 tar。
在 Ariel 向 Kubernetes 和 OpenShift 安全團隊報告後,該漏洞已經實官方確認,並且收錄爲 CVE-2019-1002101。
全國最大“同性交友”社區瞭解一下