docker逃逸漏洞復現(CVE-2019-5736)

MCNA發表於2021-10-25

漏洞概述

  • 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

漏洞復現

  1. 生成payload

https://github.com/Frichetten/CVE-2019-5736-PoC
將此內容進行更改,設定nc監聽地址。

  1. 編譯生成payload

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go

  1. 開始攻擊

將該payload拷貝到docker容器中(這就是模擬攻擊者獲取了docker容器許可權,在容器中上傳payload進行docker逃逸)

  1. xshell重新開啟一個選項卡,進入容器。(sh啟動)

docker exec -it ‘容器ID’/bin/sh

攻擊者開啟nc監聽

受害者啟動docker容器時,觸發payload,成功反彈shell。

相關文章