CVE-2019-5736: runc容器逃逸漏洞警報
Runc是一個CLI工具,可以根據OCI(Open Container Initiative)標準建立和執行容器。目前,docker引擎也是基於runc內部構建的。在2019年2月11日,研究人員通過oss-security郵件列表揭示 了runc容器逃逸漏洞的詳細資訊。為此問題分配的CVE是CVE-2019-5736。據OpenWall稱,漏洞利用細節將在2019年2月18日七天後公佈。該漏洞可能會影響大多數雲服務提供商,並且損害嚴重。
該漏洞允許惡意容器(使用者互動最少)覆蓋主機上的runc檔案,以在主機上執行具有root許可權的程式碼。在以下兩種情況下,可以通過使用者互動在具有root許可權的容器中執行任意程式碼:
*使用攻擊者控制的映象建立新容器。
*將(docker exec)附加到攻擊者之前具有寫入許可權的現有容器中。
預設AppArmor策略或Fedora[++]上的預設SELinux策略不會阻止此漏洞(因為容器程序似乎作為container_runtime_t執行)。但是,*被*阻止了
通過正確使用使用者名稱空間(主機根未對映到容器的使用者名稱空間)。
攻擊者可以通過使用指向runc的檔案替換容器中的目標檔案來欺騙runc來執行自身。例如,目標檔案是/bin/bash,用可執行指令碼替換為指定的直譯器路徑#!/proc/self/exe,並在容器中執行/bin/bash時執行 /proc/self/exe。指向主機上的runc檔案。然後,攻擊者可以繼續寫入 /proc/self/exe以嘗試覆蓋主機上的runc檔案。但一般來說,它不會成功,因為核心不允許在執行runc時覆蓋它。要解決這個問題,攻擊者可以使用O_PATH標誌開啟/ proc / self / exe的檔案描述符,然後使用O_WRONLY標誌用/proc/self/fd/<nr>重新開啟檔案並嘗試從一個在一個迴圈中。一個單獨的程序寫入此檔案。當runc退出時,覆蓋將成功,之後runc可用於攻擊其他容器或主機。
安全研究人員已經附上修復此問題的相關補丁。這個補丁基於HEAD,但是libcontainer/nsenter/中的程式碼很少變化,它應該乾淨地應用於你正在處理的任何舊版本的runc程式碼庫。
Linux公社的RSS地址 :https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址:https://www.linuxidc.com/Linux/2019-02/156873.htm