K8s kubectl 複製命令曝目錄遍歷漏洞

weixin_33843409發表於2019-04-01

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。

詳細披露細節檢視:https://www.twistlock.com/labs-blog/disclosing-directory-traversal-vulnerability-kubernetes-copy-cve-2019-1002101

相關文章