CVE-2026-69264: Flowise: CSV Agent template injection enables host RCE
GHSA-4j8x-x6v7-w9rq UNKNOWN CISA: ATTENDFlowise's CSV Agent node builds a Python code template from user-supplied CSV data and runs it inside a Pyodide interpreter that, on Node.js, exposes a JavaScript bridge with eval and dynamic import — so a crafted csvFile data URI can break out of the Python string, call js.eval, and import Node's fs and child_process modules to execute arbitrary commands as the Flowise process. This isn't a niche edge case: any workspace member with chatflows:create or agentflows/chatflows update permission can plant the payload, and once that chatflow is exposed through the public POST /api/v1/prediction/:id endpoint, unauthenticated requests trigger full host RCE — turning an internal misconfiguration into an externally reachable compromise. There's no CISA KEV listing, no public exploit or Nuclei template yet, and EPSS sits at just 0.58% (top 55th percentile), so this isn't under active mass exploitation, and CISA's SSVC decision is "Attend" rather than immediate action. That said, flowise-components has already accumulated 158 other CVEs, signaling a pattern of weak input handling in this codebase, and the two validators built for exactly this class of bug (validatePythonCodeForDataFrame, validateCustomReadCSVFunction) were never wired into the vulnerable bootstrap path — a process gap worth flagging in any vendor risk review. Patch flowise and flowise-components to 3.1.3 now, audit existing chatflows for CSV Agent nodes with suspicious data URIs, and tighten chatflows:create/update permissions to trusted users only until the upgrade is confirmed.
What is the risk?
Technically severe (unauthenticated, repeatable host RCE with arbitrary file I/O and OS command execution) but currently lower-priority by exploitation signals: no CISA KEV listing, no public exploit or Nuclei template, EPSS only 0.58% (top 55th percentile), and CISA SSVC rates it 'Attend' rather than 'Act'. The attack requires a two-stage chain — an authenticated workspace user with chatflows:create/update rights must first plant the malicious CSVAgent node — which narrows the immediate threat actor pool to insiders or compromised low-privilege accounts, but once planted, exploitation becomes trivially repeatable by any unauthenticated caller of the exposed prediction endpoint. Given the blast radius (full host compromise of the Flowise server process) outweighs the currently modest likelihood signals, this should be treated as high-severity and patched on an expedited timeline rather than deferred to routine maintenance.
How does the attack unfold?
What systems are affected?
How severe is it?
What should I do?
1 step-
1) Upgrade flowise and flowise-components to >=3.1.3 immediately — this is the only complete fix. 2) Audit all existing chatflows/agentflows for CSVAgent nodes and inspect csvFile data URI contents for anomalous payloads (base64 blobs containing import/eval-like strings or unexpected Python string terminators). 3) Restrict chatflows:create and agentflows/chatflows update permissions to a minimal, trusted set of users and review workspace RBAC assignments. 4) Add host-based monitoring/EDR on the Flowise process for unexpected child_process spawns or fs access outside expected data directories. 5) Rate-limit and monitor the /api/v1/prediction/:id endpoint for anomalous invocation patterns, especially on newly published or rarely-used chatflows. 6) If other Pyodide-based or similar sandboxed-interpreter nodes are in use, confirm with the vendor that the js bridge to globalThis is disabled or restricted (no eval, no dynamic import) rather than assuming sandbox isolation.
What does CISA's SSVC say?
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-69264?
Flowise's CSV Agent node builds a Python code template from user-supplied CSV data and runs it inside a Pyodide interpreter that, on Node.js, exposes a JavaScript bridge with eval and dynamic import — so a crafted csvFile data URI can break out of the Python string, call js.eval, and import Node's fs and child_process modules to execute arbitrary commands as the Flowise process. This isn't a niche edge case: any workspace member with chatflows:create or agentflows/chatflows update permission can plant the payload, and once that chatflow is exposed through the public POST /api/v1/prediction/:id endpoint, unauthenticated requests trigger full host RCE — turning an internal misconfiguration into an externally reachable compromise. There's no CISA KEV listing, no public exploit or Nuclei template yet, and EPSS sits at just 0.58% (top 55th percentile), so this isn't under active mass exploitation, and CISA's SSVC decision is "Attend" rather than immediate action. That said, flowise-components has already accumulated 158 other CVEs, signaling a pattern of weak input handling in this codebase, and the two validators built for exactly this class of bug (validatePythonCodeForDataFrame, validateCustomReadCSVFunction) were never wired into the vulnerable bootstrap path — a process gap worth flagging in any vendor risk review. Patch flowise and flowise-components to 3.1.3 now, audit existing chatflows for CSV Agent nodes with suspicious data URIs, and tighten chatflows:create/update permissions to trusted users only until the upgrade is confirmed.
Is CVE-2026-69264 actively exploited?
No confirmed active exploitation of CVE-2026-69264 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-69264?
1) Upgrade flowise and flowise-components to >=3.1.3 immediately — this is the only complete fix. 2) Audit all existing chatflows/agentflows for CSVAgent nodes and inspect csvFile data URI contents for anomalous payloads (base64 blobs containing import/eval-like strings or unexpected Python string terminators). 3) Restrict chatflows:create and agentflows/chatflows update permissions to a minimal, trusted set of users and review workspace RBAC assignments. 4) Add host-based monitoring/EDR on the Flowise process for unexpected child_process spawns or fs access outside expected data directories. 5) Rate-limit and monitor the /api/v1/prediction/:id endpoint for anomalous invocation patterns, especially on newly published or rarely-used chatflows. 6) If other Pyodide-based or similar sandboxed-interpreter nodes are in use, confirm with the vendor that the js bridge to globalThis is disabled or restricted (no eval, no dynamic import) rather than assuming sandbox isolation.
What systems are affected by CVE-2026-69264?
This vulnerability affects the following AI/ML architecture patterns: agent frameworks, low-code AI orchestration, code execution sandboxes, agent tool invocation pipelines.
What is the CVSS score for CVE-2026-69264?
No CVSS score has been assigned yet.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0049 Exploit Public-Facing Application AML.T0050 Command and Scripting Interpreter AML.T0053 AI Agent Tool Invocation AML.T0081 Modify AI Agent Configuration AML.T0105 Escape to Host Compliance Controls Affected
What are the technical details?
Original Advisory
Prior to 3.1.3, Flowise CSVAgent interpolates an attacker-controlled segment of the csvFile data URI directly into a Python source-code template that is then executed by Pyodide. Because Pyodide is loaded with the default js bridge to globalThis, which on Node.js exposes eval and dynamic import, the attacker can break out of the Python string literal, hand a JavaScript string to js.eval, dynamically import Node built-in modules such as fs and child_process, and execute arbitrary file I/O or OS commands as the Flowise process. The two validator paths around this code, validatePythonCodeForDataFrame and validateCustomReadCSVFunction, are never applied to the bootstrap template. A workspace user with chatflows:create or agentflows/chatflows update permission can plant a CSV Agent node with a crafted csvFile; once the chatflow is exposed via POST /api/v1/prediction/:id, any unauthenticated request triggers host remote code execution. This issue is fixed in version 3.1.3.
Exploitation Scenario
A workspace user with chatflows:create permission (an insider, a compromised low-privilege account, or a malicious contractor) builds a chatflow containing a CSV Agent node and sets its csvFile to a data URI whose content breaks out of the Python string literal used in Flowise's code-generation template. The escaped payload calls js.eval — reachable because Pyodide's default js bridge exposes globalThis on Node.js — to dynamically import Node's fs and child_process modules, none of which pass through the validatePythonCodeForDataFrame or validateCustomReadCSVFunction checks since those never cover the bootstrap template. The attacker publishes or shares the chatflow so it's reachable via POST /api/v1/prediction/:id; from that point on, any unauthenticated request to that endpoint re-executes the payload, giving the attacker (or anyone who discovers the endpoint) repeatable arbitrary file read/write and OS command execution as the Flowise host process — enabling data theft, lateral movement, or full server takeover.
Weaknesses (CWE)
CWE-94 Improper Control of Generation of Code ('Code Injection')
Primary
CWE-95 Improper Neutralization of Directives in Dynamically Evaluated Code ('Eval Injection')
Primary
CWE-94 Improper Control of Generation of Code ('Code Injection') CWE-94 Improper Control of Generation of Code ('Code Injection') CWE-95 Improper Neutralization of Directives in Dynamically Evaluated Code ('Eval Injection') CWE-95 Improper Neutralization of Directives in Dynamically Evaluated Code ('Eval Injection') CWE-94 — Improper Control of Generation of Code ('Code Injection'): The product constructs all or part of a code segment using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the syntax or behavior of the intended code segment.
- [Architecture and Design] Refactor your program so that you do not have to dynamically generate code.
- [Architecture and Design] Run your code in a "jail" or similar sandbox environment that enforces strict boundaries between the process and the operating system. This may effectively restrict which code can be executed by your product. Examples include the Unix chroot jail and AppArmor. In general, managed code may provide some protection. This may not be a feasible solution, and it only limits the impact to the operating system; the rest of your application may still be subject to compromise. Be careful to avoid CWE-243 and other weaknesses related to jails.
Source: MITRE CWE corpus.
References
- github.com/FlowiseAI/Flowise/commit/f4e2794f6a576b94578f2fdafbf49c2fb304626c x_refsource_MISC
- github.com/FlowiseAI/Flowise/pull/6499 x_refsource_MISC
- github.com/FlowiseAI/Flowise/releases/tag/flowise@3.1.3 x_refsource_MISC
- github.com/FlowiseAI/Flowise/security/advisories/GHSA-4j8x-x6v7-w9rq x_refsource_CONFIRM
- github.com/advisories/GHSA-4j8x-x6v7-w9rq
Timeline
Related Vulnerabilities
CVE-2025-71338 10.0 Flowise: unauthenticated file write enables RCE
Same package: flowise CVE-2025-59528 10.0 Flowise: Unauthenticated RCE via MCP config injection
Same package: flowise CVE-2025-61913 9.9 Flowise: path traversal in file tools leads to RCE
Same package: flowise CVE-2026-40933 9.9 Flowise: RCE via MCP stdio command injection
Same package: flowise CVE-2026-46442 9.9 Flowise: sandbox escape enables authenticated RCE
Same package: flowise