CVE-2026-69255: Flowise: code injection in CSVAgent enables root RCE

GHSA-vmv7-4m6c-3cg5 UNKNOWN CISA: ATTEND
Published August 4, 2026
CISO Take

Flowise's CSVAgent node builds a Python snippet by directly interpolating attacker-controlled CSV data into a string (base64_string = "${base64String}") before handing it to the Pyodide interpreter, and the existing denylist only screens later LLM-generated code, so the initial injection point was never validated. Any authenticated user of a Flowise instance can inject a closing quote plus arbitrary Python, then use Pyodide's js bridge to reach Node's child_process module and execute OS commands as root inside the container — a full sandbox escape, not a contained scripting bug. This affects flowise and flowise-components with 158 other CVEs already logged against the package, and while EPSS sits low (0.00313, though ranked in the top 76% of scored CVEs) with no public exploit, PoC, Nuclei template, or CISA KEV listing, the required authentication is a low bar in most low-code deployments where multiple business users hold accounts. CISA's SSVC decision is ATTEND, meaning organizations should track it on a normal patch cycle rather than treat it as an emergency, but any org running self-hosted Flowise below 3.1.3 with the CSVAgent enabled should patch to 3.1.3 immediately given the root-in-container blast radius. In the interim, disable or restrict CSVAgent to trusted admins and monitor for unexpected child_process spawns from the Pyodide/Flowise process.

Sources: NVD GitHub Advisory EPSS CISA KEV ATLAS

What is the risk?

Moderate-to-high technical severity (unauthenticated CVSS score is unavailable, but the outcome is root code execution inside the application container) offset by a meaningful exploitation barrier: the attacker must already hold an authenticated Flowise account and understand how to craft a CSV payload that survives file.split(',').pop() extraction and breaks out of the interpolated Python string. There is no evidence of active exploitation (not in CISA KEV), no public PoC, and no Nuclei template, and EPSS scores it low in absolute terms. The primary exposure driver is deployment pattern: multi-tenant or team-shared Flowise instances where many internal users have accounts turn 'authenticated' into a low practical barrier, and a root container compromise can be a pivot point into internal infrastructure, secrets, and other agent flows hosted on the same node.

How does the attack unfold?

Initial Access
An authenticated Flowise user configures or invokes the CSVAgent node with an attacker-crafted CSV file.
AML.T0053
Code Injection
The unsanitized CSV value is interpolated into a Python string executed by Pyodide, allowing the attacker to inject and run arbitrary Python code.
AML.T0050
Sandbox Escape
The injected Python uses Pyodide's js interop bridge to reach Node's child_process module, breaking out of the WASM sandbox into the host process.
AML.T0105
Impact
The attacker executes arbitrary OS commands as root inside the Flowise container, achieving full compromise of the agent workflow engine.

What systems are affected?

Package Ecosystem Vulnerable Range Patched
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
0.6%
chance of exploitation in 30 days
Higher than 47% of all CVEs
Exploitation Status
Exploit Available
Exploitation: MEDIUM
Sophistication
Advanced
Exploitation Confidence
medium
VulnCheck KEV (exploitation reported — broader/earlier than CISA) — Sep 2026
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 or later immediately — this is the only complete fix. 2) Until patched, disable the CSVAgent node or restrict its use to fully trusted/admin accounts only; do not expose it to lower-trust internal users. 3) Run Flowise containers with least-privilege (non-root) where the platform allows, and use container-level egress/process controls to detect or block unexpected child_process/os-command execution originating from the Node/Pyodide process. 4) Audit Flowise instance logs for CSVAgent invocations with anomalous CSV content (unexpected quote characters, embedded Python-like syntax) around the disclosure window. 5) Rotate any credentials or API keys accessible to the Flowise container if you cannot confirm the instance was unaffected prior to patching.

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 development and deployment security
NIST AI RMF
MANAGE-2.3 - Mechanisms for managing risks of AI system failures or negative impacts
OWASP LLM Top 10
LLM08 - Excessive Agency

Frequently Asked Questions

What is CVE-2026-69255?

Flowise's CSVAgent node builds a Python snippet by directly interpolating attacker-controlled CSV data into a string (base64_string = "${base64String}") before handing it to the Pyodide interpreter, and the existing denylist only screens later LLM-generated code, so the initial injection point was never validated. Any authenticated user of a Flowise instance can inject a closing quote plus arbitrary Python, then use Pyodide's js bridge to reach Node's child_process module and execute OS commands as root inside the container — a full sandbox escape, not a contained scripting bug. This affects flowise and flowise-components with 158 other CVEs already logged against the package, and while EPSS sits low (0.00313, though ranked in the top 76% of scored CVEs) with no public exploit, PoC, Nuclei template, or CISA KEV listing, the required authentication is a low bar in most low-code deployments where multiple business users hold accounts. CISA's SSVC decision is ATTEND, meaning organizations should track it on a normal patch cycle rather than treat it as an emergency, but any org running self-hosted Flowise below 3.1.3 with the CSVAgent enabled should patch to 3.1.3 immediately given the root-in-container blast radius. In the interim, disable or restrict CSVAgent to trusted admins and monitor for unexpected child_process spawns from the Pyodide/Flowise process.

Is CVE-2026-69255 actively exploited?

No confirmed active exploitation of CVE-2026-69255 has been reported, but organizations should still patch proactively.

How to fix CVE-2026-69255?

1) Upgrade flowise and flowise-components to 3.1.3 or later immediately — this is the only complete fix. 2) Until patched, disable the CSVAgent node or restrict its use to fully trusted/admin accounts only; do not expose it to lower-trust internal users. 3) Run Flowise containers with least-privilege (non-root) where the platform allows, and use container-level egress/process controls to detect or block unexpected child_process/os-command execution originating from the Node/Pyodide process. 4) Audit Flowise instance logs for CSVAgent invocations with anomalous CSV content (unexpected quote characters, embedded Python-like syntax) around the disclosure window. 5) Rotate any credentials or API keys accessible to the Flowise container if you cannot confirm the instance was unaffected prior to patching.

What systems are affected by CVE-2026-69255?

This vulnerability affects the following AI/ML architecture patterns: agent frameworks, low-code AI orchestration, code execution sandboxes, data analysis agents.

What is the CVSS score for CVE-2026-69255?

No CVSS score has been assigned yet.

What is the AI security impact?

Affected AI Architectures

agent frameworkslow-code AI orchestrationcode execution sandboxesdata analysis agents

MITRE ATLAS Techniques

AML.T0049 Exploit Public-Facing Application
AML.T0050 Command and Scripting Interpreter
AML.T0053 AI Agent Tool Invocation
AML.T0105 Escape to Host

Compliance Controls Affected

EU AI Act: Article 15
ISO 42001: A.6.2.6
NIST AI RMF: MANAGE-2.3
OWASP LLM Top 10: LLM08

What are the technical details?

Original Advisory

Flowise is a drag & drop user interface to build a customized large language model flow. Prior to 3.1.3, the CSVAgent in packages/components/nodes/agents/CSVAgent/CSVAgent.ts extracted attacker-controlled CSV data with file.split(',').pop() and interpolated it directly into executable Python as base64_string = "${base64String}" before calling Pyodide. The validatePythonCodeForDataFrame() denylist only checked later LLM-generated code and did not validate this initial code block. An authenticated attacker could inject a closing quote followed by Python code, use Pyodide's js bridge to load Node.js child_process, and execute arbitrary operating system commands as root in the Flowise container. This issue is fixed in version 3.1.3.

Exploitation Scenario

An attacker who has obtained (or been granted) a low-privilege authenticated account on a self-hosted Flowise instance builds or edits an agent flow that includes the CSVAgent node. They upload or reference a CSV file whose content is crafted so that file.split(',').pop() extracts a value ending in a closing double-quote, terminating the intended base64_string = "..." Python assignment early. The attacker appends arbitrary Python after that injected quote, which Pyodide then executes as part of the agent's data-analysis step. From within that Python context, the attacker uses Pyodide's js interop bridge to call into the host Node.js runtime and invoke child_process, escaping the WASM sandbox entirely and running arbitrary OS commands with root privileges inside the Flowise container — from there pivoting to read environment secrets, other configured agent credentials, or the underlying host network.

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