CVE-2025-9074 (教育用 PoC・概念验证代码)
本仓库包含一个用于教育目的的 PoC,演示了利用 Docker Engine 的未认证远程 API 创建可读写主机文件系统的特权容器的风险。
执行文件为 poc.go。
重要:本 PoC 仅限用于教育及防御目的。禁止在第三方环境或未经授权的系统上执行。
危险性评估
- 综合评估:严重
- 预估 CVSS v3.1 基本分:9.8 (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)
- 依据:
- 未认证即可访问 TCP/2375 → PR:N, UI:N, AV:N
- 通过特权容器 + 主机绑定挂载导致作用域变更,机密性/完整性/可用性影响严重 → S:C, C/I/A:H
- 攻击步骤只需向 Docker Engine API 发送少量 HTTP 请求即可完成 → AC:L
- 影响范围:
- 整个主机操作系统、其他容器、同一网络中的资产(包括凭据窃取和横向移动)
- 执行权限:
背景
- Docker Engine 提供远程 API,可通过
/version、/info、/containers/create 等端点进行操作。
- 若容器可从外部访问,则存在无需认证即可创建容器、授予特权、绑定挂载主机目录的情况。
- 在 Windows + Docker Desktop 环境中,存在可通过
/run/desktop/mnt/host/<驱动器> 或 /host_mnt/<驱动器> 访问 Windows 主机驱动器的挂载路径。本 PoC 利用该路径在主机上生成文件以可视化影响。
操作概要
poc.go 执行以下操作:
- 向
http://192.168.65.7:2375 调用 Docker Engine API 进行连通性测试(/version)
- 检查可用镜像列表(
/images/json),若不存在则尝试拉取 alpine:latest
- 创建特权容器,将主机驱动器(例如 C:、N:)绑定挂载到
/host_root
- 从容器内向
/host_root 根目录写入验证文件(例如 cve_2025_9074_poc.txt)以可视化影响
- 执行后删除容器
风险(设想的滥用方式)
- 读写主机文件系统(在 Docker Engine 执行权限范围内)
- 窃取机密信息(密码、SSH 密钥等)
- 篡改系统配置文件
- 植入恶意软件、持久化
- 向其他容器及网络横向移动
- 权限提升
必要条件
- Go 1.20 以上(可通过
go run 运行)
- (存在漏洞的)Docker Desktop/Engine 正在运行
- (存在漏洞的)Docker Desktop/Engine 上运行的 Docker 容器中执行本代码
- Docker Engine API 在
http://192.168.65.7:2375 上响应(PoC 的默认值)
使用方法
-
获取仓库
git clone <this-repo>
cd cve-2025-9074
-
执行 PoC
-
输出示例
- 显示与
/version 的连通性测试成功
- 检测可用镜像或拉取
alpine:latest
- 创建特权容器,在主机上创建文件的结果
- 基于
/info 的系统信息摘要
-
演示用的 curl 示例(将显示在屏幕上)
- 向
/containers/create 发送的 JSON 示例,/containers/{id}/start 的启动示例
配置自定义
- 可调整
attemptHostWrite 内的候选数组(/run/desktop/mnt/host/<驱动器>、/host_mnt/<驱动器>、C:/ 等)以适配环境。
- 使用的镜像
- 优先使用现有镜像。若无则自动拉取
alpine:latest。
验证环境注意事项
- 包含基于 Windows + Docker Desktop 行为的挂载路径示例。
- 在 macOS 下主机路径不同,需要相应修改。
- 根据 Docker Desktop 的版本或配置,PoC 可能不成立(即安全)。
免责声明
- 本仓库仅用于研究和教育目的。不鼓励攻击、侵入或破坏行为。
- 对于因使用本 PoC 而产生的任何损害,作者概不负责。
- 请勿在自身不具备合法管理权限的隔离环境之外执行。
许可证