CVE-2019-5736 runc容器逃逸漏洞分析

漏洞编号

CVE-2019-5736

漏洞简介

runc是一个根据OCI(Open Container Initiative)标准创建并运行容器的CLI tool,目前Docker、Containerd和CRI-O等容器都运行在runc之上。

该漏洞允许恶意容器(以最少的用户交互)覆盖主机上的runc二进制文件,从而获得root权限在主机上执行代码。
漏洞可能影响通过受影响版本Docker部署的应用、虚拟主机、云服务器。K8s集群,含有受影响runc版本的Linux发行版等。

漏洞影响

Ubuntu:runc 1.0.0~rc4+dfsg1-6ubuntu0.18.10.1之前版本

Debian:runc 0.1.1+dfsg1-2 之前版本
RedHat Enterprise Linux: docker 1.13.1-91.git07f3374.el7之前版本
Amazon Linux:docker 18.06.1ce-7.25.amzn1.x86_64之前版本

CoreOS:2051.0.0之前版本
Kops Debian 所有版本(正在修复)
Docker:18.09.2之前版本

利用条件

使用攻击者控制的镜像创建新容器
攻击者具有某容器的写入权限,通过docker exec或其他方式进入容器中

runc代码修复

当前docker 版本信息

Docker version: 17.03.1-ce

Docker-runc version: 1.0.0-rc2

Docker-runc commit: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe

当前已有基于1.0.0-rc2修复逃逸漏洞的开源代码
当前修复版本github地址:
https://github.com/rancher/runc-cve/tree/release-v17.03.2

Docker-runc 修复版本下载地址
https://github.com/rancher/runc-cve/releases/download/CVE-2019-5736-build3/runc-v17.03.2-amd64-no-memfd_create

说明:通过查看docker发行版本,发现docker并没有对runc代码做改动

漏洞复现

1、拉取github poc 源码,构建高危镜像

git clone https://github.com/twistlock/RunC-CVE-2019-5736.git<br/>

2、构建镜像

cd malicious_image_POC
docker built -t maliciouspoc:0.1 .
图片1.png

3、漏洞测试
测试主机:172.22.242.172,查看当前docker-runc的版本

启动poc容器

图片2.png
图片3.png

查看docker-runc版本,发现docker-runc已经被篡改,如下提示:

修复方法

下载docker-runc 修复版本,进行主机上docker-runc替换;

执行以下命令定位docker-runc。

图片4.png

执行以下命令备份原有的runc

cp /usr/bin/docker-runc /root/soft/docker-runc.bak
图片5.png

将新版本的runc拷贝到 /usr/bin/ 目录下

图片6.png

验证漏洞是否修复:
执行docker run maliciouspoc:0.1镜像,发现runc不会被覆盖,成功修复!

第5章 参考连接

https://asciinema.org/a/228625

http://x3fwy.bitcron.com/post/runc-malicious-container-escape

https://github.com/rancher/runc-cve/tree/release-v17.03.2

https://blog.aquasec.com/runc-vulnerability-cve-2019-5736

https://github.com/twistlock/RunC-CVE-2019-5736

发表评论

电子邮件地址不会被公开。 必填项已用*标注