漏洞概述
- 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。