漏洞概述
- 2019年2月11日,runC的維護團隊報告了一個新發現的漏洞,SUSE Linux GmbH高級軟件工程師Aleksa Sarai公布了影響Docker, containerd, Podman, CRI-O等默認運行時容器runc的嚴重漏洞CVE-2019-5736。漏洞會對IT運行環境帶來威脅,漏洞利用會觸發容器逃逸、影響整個容器主機的安全,最終導致運行在該主機上的其他容器被入侵。漏洞影響AWS, Google Cloud等主流雲平台。攻擊者可以通過特定的容器鏡像或者exec操作可以獲取到宿主機的runC執行時的文件句柄並修改掉runc的二進制文件,從而獲取到宿主機的root執行權限。
漏洞原理
- 漏洞點在於runC,RunC是一個容器運行時,最初是作為Docker的一部分開發的,后來作為一個單獨的開源工具和庫被提取出來。作為“低級別”容器運行時,runC主要由“高級別”容器運行時(例如Docker)用於生成和運行容器,盡管它可以用作獨立工具。像Docker這樣的“高級別”容器運行時通常會實現鏡像創建和管理等功能,並且可以使用runC來處理與運行容器相關的任務:創建容器、將進程附加到現有容器等。在Docker 18.09.2之前的版本中使用了的runc版本小於1.0-rc6,因此允許攻擊者重寫宿主機上的runc 二進制文件,攻擊者可以在宿主機上以root身份執行命令。
利用方式
- docker 18.09.2之前的runc存在漏洞,攻擊者可以修改runc的二進制文件導致提權。
影像版本
- docker version <=18.09.2 RunC version <=1.0-rc6
環境搭建
第一步:卸載已將安裝的docker
sudo apt-get remove docker docker-engine docker-ce docker.io
第二步:安裝前准備
1. 更新索引包
sudo apt-get update
2、安裝以下包,以使apt 可以通過https 使用repository
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
3、添加Docker官方的GPG密鑰並更新索引包
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
sudo apt-get update
第三步安裝指定的docker版本
1、列出可用版本
apt-cache madison docker-ce
2、選擇一個版本來安裝
sudo apt-get install docker-ce=18.06.1~ce~3-0~ubuntu
漏洞復現
- 生成payload
https://github.com/Frichetten/CVE-2019-5736-PoC
將此內容進行更改,設置nc監聽地址。
- 編譯生成payload
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
- 開始攻擊
將該payload拷貝到docker容器中(這就是模擬攻擊者獲取了docker容器權限,在容器中上傳payload進行docker逃逸)
- xshell重新打開一個選項卡,進入容器。(sh啟動)
docker exec -it ‘容器ID’/bin/sh
攻擊者開啟nc監聽
受害者啟動docker容器時,觸發payload,成功反彈shell。