CVE-2026-69264: Flowise: CSV Agent template injection enables host RCE

GHSA-4j8x-x6v7-w9rq UNKNOWN CISA: ATTEND
Published August 4, 2026
CISO Take

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.

Sources: NVD GitHub Advisory EPSS CISA KEV CISA SSVC ATLAS

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?

Malicious configuration
A workspace user with chatflows:create/update permission plants a CSV Agent node whose csvFile data URI contains a Python-template-breakout payload.
AML.T0081
Sandbox escape
When the CSVAgent bootstrap template executes in Pyodide, the payload breaks out of the Python string literal and reaches js.eval via the exposed globalThis bridge.
AML.T0105
Code execution
The JavaScript payload dynamically imports Node built-ins (fs, child_process) to perform arbitrary file I/O or run OS commands as the Flowise process.
AML.T0050
Unauthenticated remote trigger / impact
Once the chatflow is exposed, any unauthenticated request to POST /api/v1/prediction/:id re-triggers execution, giving remote attackers repeatable host compromise.
AML.T0049

What systems are affected?

Package Ecosystem Vulnerable Range Patched
Flowise npm No patch
Flowise npm <= 3.1.2 3.1.3
Flowise npm <= 3.1.2 3.1.3

How severe is it?

CVSS 3.1
N/A
EPSS
1.2%
chance of exploitation in 30 days
Higher than 65% of all CVEs
Exploitation Status
Exploit Available
Exploitation: MEDIUM
Sophistication
Advanced
Exploitation Confidence
medium
CISA SSVC: Public PoC
Composite signal derived from CISA KEV, VulnCheck KEV, CISA SSVC, EPSS, Metasploit, Exploit-DB, trickest/cve, Nuclei templates, and inthewild.io exploitation reports.

What should I do?

1 step
  1. 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?

Decision Attend
Exploitation poc
Automatable No
Technical Impact total

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:

EU AI Act
Article 15 - Accuracy, robustness and cybersecurity
ISO 42001
A.6.2.6 - AI system verification and validation
OWASP LLM Top 10
LLM05:2025 - Improper Output Handling LLM06:2025 - Excessive Agency

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

agent frameworkslow-code AI orchestrationcode execution sandboxesagent tool invocation pipelines

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

EU AI Act: Article 15
ISO 42001: A.6.2.6
OWASP LLM Top 10: LLM05:2025, LLM06:2025

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'): 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.

Timeline

Published
August 4, 2026
Last Modified
August 4, 2026
First Seen
August 4, 2026

Related Vulnerabilities