Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconReach exposed CSV Agent chatflow endpoint
-
DeliverySubmit prompt-injection prediction request
-
ExploitLLM emits obfuscated Python payload
-
InstallPayload bypasses regex blocklist validator
-
C2Code runs in unsandboxed pyodide
-
ExecuteExecute commands as service account
-
ImpactEstablish reverse shell / host compromise
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Code injection prevention, sandbox exec
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires a target Flowise instance (<= 3.1.2) that exposes a chatflow containing a CSV Agent node whose prediction endpoint is reachable by the attacker; per CVSS PR:N and the advisory, no authentication is needed for the prompt-injection path. The key limiting factor is LLM non-determinism (reflected as AC:H/AT:P): the injected prompt must actually coax the configured model into returning a bypassing payload, which may take multiple attempts or model-specific phrasing. This limitation is removed for an authenticated user, who can instead create a chatflow whose CSV Agent points at an attacker-controlled LLM endpoint that deterministically returns the payload, bypassing the model entirely. Exploitation is further gated on the CSV Agent node being present and enabled in a chatflow -- instances that never use this deprecated node are not exposed. |
| Impact | The vendor CVSS 4.0 vector (AV:N/AC:H/AT:P/PR:N/UI:N, full VC/VI/VA:H and subsequent SC/SI/SA:H, score 9.5) captures the tension well: impact is maximal (unauthenticated network-reachable code execution that escapes the WASM runtime to the host), but AC:H and AT:P reflect that the prompt-injection path depends on non-deterministic LLM behavior, so a single attempt may not reliably produce a bypassing payload -- the PoC itself notes it may take multiple tries or model-specific injections. That probabilistic barrier is eliminated in the authenticated variant, where an attacker configures a chatflow pointed at an attacker-controlled LLM endpoint that returns the payload directly, making execution deterministic. No EPSS score and no CISA KEV entry were supplied, so real-world exploitation frequency is unquantified; the presence of a detailed multi-technique PoC materially raises practical risk above raw signals. Net: a genuine high priority for any Flowise deployment exposing a CSV Agent chatflow, tempered only by the reliability caveat of the unauthenticated injection route. |
| Exploit ScenarioDerived | An attacker who can reach a public Flowise chatflow that uses the CSV Agent node submits a crafted prediction request whose question is a prompt injection instructing the model to emit an obfuscated Python payload (e.g. an @exec decorator over a string-concatenated __import__); the payload passes the regex blocklist and executes in the unsandboxed pyodide runtime, spawning a reverse shell as the service account. A working PoC (poc.py) automates all three paths -- hosting a malicious LLM server, provisioning a malicious chatflow, and direct prompt injection -- so exploitation requires little bespoke development. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv2 – Aug 04, 2026
Remote code execution in Flowise (npm flowise / flowise-components <= 3.1.2) lets an unauthenticated attacker who can query a chatflow built on the CSV Agent node coerce the backing LLM, via prompt injection, into returning a Python payload that slips past the regex blocklist validator and runs in an unsandboxed pyodide runtime, yielding arbitrary code execution as the Flowise service account. Trend Micro ZDI (Dre Cura, TrendAI Research) demonstrated eight distinct validator-bypass techniques and shipped a working proof of concept; this is scored CVSS 4.0 9.5 (CWE-94). Publicly available exploit code exists, but there is no CISA KEV listing or evidence of active exploitation at time of analysis.
Earlier versions of this analysis (1)
Remote code execution in FlowiseAI Flowise (versions <= 3.1.2) lets attackers run arbitrary Python on the host by abusing the CSV Agent node: a prompt injection coaxes the configured LLM into returning obfuscated Python that slips past the regex blocklist in validatePythonCodeForDataFrame and runs in an unsandboxed pyodide runtime with full OS access. The flaw (CWE-94) is unauthenticated when a chatflow with a CSV Agent node is exposed, and Trend Micro ZDI documented eight distinct validator-bypass variants. It is fixed in 3.1.3; publicly available exploit code exists (ZDI-supplied poc.py), but no public in-the-wild exploitation is confirmed.
RemediationAI
Vendor-released patch: upgrade flowise and flowise-components to 3.1.3 or later (fix per GHSA-5xvg-pmgg-3mxr; changes in PR https://github.com/FlowiseAI/Flowise/pull/6499 and commit https://github.com/FlowiseAI/Flowise/commit/f4e2794f6a576b94578f2fdafbf49c2fb304626c, which removes the deprecated Python-agent nodes rather than merely hardening the denylist). If you cannot upgrade immediately, remove or disable the CSV Agent node from any deployed chatflow so no user-reachable path evaluates LLM-generated Python, and where the node is required, restrict which models/endpoints a chatflow may point to so operators cannot redirect it to an attacker-controlled LLM. Additionally place Flowise behind authentication and network restrictions so its prediction endpoints are not exposed to untrusted callers, and run the process under a least-privilege service account in an isolated container to limit blast radius; note these are compensating controls only -- the static regex validator is demonstrably bypassable and must not be relied upon, so upgrading to 3.1.3 is the sole complete fix.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Flowise is an open-source low-code builder for LLM agent workflows (chatflows); the affected component is the CSV Agent node implemented in packages/components/nodes/agents/CSVAgent/CSVAgent.ts within the flowise-components package. At runtime the node's run method loads a CSV into a pandas DataFrame inside a pyodide (WebAssembly Python) environment, extracts column names/types into a dictionary, then interpolates that dictionary together with the user's raw question into a system prompt sent to a configured chat model. The model's textual response is treated as executable Python (pythonCode) and, after passing validatePythonCodeForDataFrame in packages/components/src/pythonCodeValidator.ts, is executed via pyodide.runPythonAsync. The root cause is CWE-94 (Code Injection): the trust boundary is misplaced -- untrusted user input drives generation of the executed code, and the sole guardrail is a static regex denylist that cannot enforce a safe subset of Python. pyodide is not isolated from the host OS, so any bypassing code reaches full OS interfaces.
Know when Trend Micro gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
Network-reachable and unauthenticated (AV:N/PR:N); AC:H because reliable exploitation depends on non-deterministic LLM output; S:C as code escapes the pyodide runtime to the host OS, with full C/I/A impact.
Primary rating from Vendor (https://github.com/FlowiseAI/Flowise).
CVSS VectorVendor: https://github.com/FlowiseAI/Flowise
Lifecycle Timeline
2DescriptionCVE.org
-- ABSTRACT -------------------------------------
Trend Micro's Zero Day Initiative has identified a vulnerability affecting the following products: Flowise - Flowise
-- VULNERABILITY DETAILS ------------------------
- Version tested: 3.1.1
- Installer file: https://github.com/FlowiseAI/Flowise (npm install flowise@3.1.1)
- Platform tested: Ubuntu 25.10
---
A prompt injection sent to a chatflow using a CSV Agent node can cause the LLM to respond with a malicious Python script that bypasses the blocklist validator and executes in an unsandboxed pyodide environment. An attacker can leverage this to execute arbitrary code in the context of the user running the server.
This vulnerability allows remote attackers to execute arbitrary code on affected installations of Flowise. Authentication is not required to exploit this vulnerability.
The specific flaw exists within the run method of the CSV_Agents class. The issue results from insufficient input sanitization when using untrusted data to construct an LLM prompt. An attacker can leverage this vulnerability to execute code in the context of the service account.Analysis
When a user makes a query against a chatflow using the CSV Agent node, the run method of the CSV_Agents class is called. This method reads the CSV file, loads a pyodide environment, and uses pandas to extract column names and data types into a dictionary. It then constructs a system prompt using that dictionary and the user's input, and sends this prompt to a configured LLM. The LLM response is stored in a variable named pythonCode. The method then attempts to validate this value using validatePythonCodeForDataFrame from packages/components/src/pythonCodeValidator.ts before evaluating it in pyodide.
The validator relies on a static regex blocklist. It can be bypassed using obfuscation techniques including string concatenation to reconstruct forbidden identifiers, chr() encoding, aliasing of dangerous builtins, __getattribute__ with concatenated attribute names, frame object inspection, MRO traversal, df.query() expression evaluation, and decorator syntax to invoke exec indirectly. Furthermore, pyodide is not sandboxed from the host operating system, so any Python code that passes the validator is executed with full access to OS interfaces.
From packages/components/nodes/agents/CSVAgent/CSVAgent.ts:
let pythonCode = ''
if (dataframeColDict) {
const chain = new LLMChain({
llm: model,
prompt: PromptTemplate.fromTemplate(systemPrompt),
verbose: process.env.DEBUG === 'true' ? true : false
})
const inputs = {
dict: dataframeColDict,
question: input // user-controlled input substituted into prompt
}
const res = await chain.call(inputs, [loggerHandler, ...callbacks])
pythonCode = res?.text // LLM response assigned to pythonCode
pythonCode = pythonCode.replace(/^```[a-z]+\n|\n```$/gm, '')
}
let finalResult = ''
if (pythonCode) {
const validation = validatePythonCodeForDataFrame(pythonCode) // blocklist validation applied
if (!validation.valid) {
throw new Error(
`Generated code was rejected for security reasons (${
validation.reason ?? 'unsafe construct'
}). Please rephrase your question to use only pandas DataFrame operations.`
)
}
try {
const code = `import pandas as pd\nimport numpy as np\n${pythonCode}`
finalResult = await pyodide.runPythonAsync(code) // executed in unsandboxed pyodide
} catch (error) {
throw new Error(`Sorry, I'm unable to find answer for question: "${input}" using following code: "${pythonCode}"`)
}
}An unauthenticated attacker with the ability to send prompts to a chatflow using the CSV Agent node may use prompt injection to cause the LLM to respond with a malicious Python script. An authenticated attacker may instead configure a chatflow that points to an attacker-controlled server, which responds to LLM requests with an attacker-controlled Python payload, bypassing the LLM entirely.
Eight bypass variants were demonstrated against the validator:
| Variant | Technique | Bypasses |
|---|---|---|
| 0 | @exec decorator with string-concatenated __import__ | /\bexec\s*\(/, /\b__import__\s*\(/ |
| 1 | eval aliased to a variable, payload chr()-encoded | /\beval\s*\(/, /\bimport\b/ |
| 2 | df.query() with chr()-encoded @__builtins__.__import__ | /\b__builtins__\b/, /\b__import__\s*\(/ |
| 3 | MRO traversal + __getattribute__ + __subclasses__ -> BuiltinImporter.load_module | /\b__class__\b/, /\b__subclasses__\s*\(/, /\b__mro__\b/ |
| 4 | Generator frame inspection via gi_frame.f_globals['__loader__'] | /\b__loader__\b/, /\b__globals__\b/ |
| 5 | Exception traceback frame walk to f_builtins['__import__'] | /\b__globals__\b/, /\b__import__\s*\(/ |
| 6 | __build_class__.__self__.__getattribute__('__import__') | /\b__import__\s*\(/ |
| 7 | vars aliased to a variable, __builtins__ accessed via dict key | /\bvars\s*\(/, /\b__builtins__\b/, /\b__import__\s*\(/ |
Repro
The proof of concept (poc.py) has three modes of operation:
mode = "server": Starts a malicious server that responds to "/api/chat" requests with a JSON object containing an LLM response with the selected attack payload.
mode = "chatflow": Authenticates to the Flowise server, creates a chatflow with a CSV Agent node configured to use a ChatOllama model pointed at the malicious server, and triggers a prediction to execute the payload.
mode = "prompt_injection": Sends a prompt injection payload directly to an existing chatflow's prediction endpoint. Due to the nature of LLM responses, it may take multiple attempts or require a different injection technique depending on the model used.
python3 poc.py --mode [server OR chatflow OR prompt_injection] [--user <USER> --passwd <PASSWORD> --host <HOST> --r_host <R_HOST> --r_port <R_PORT> --l_port <L_PORT> --port <PORT> --cmd <CMD> --attack <ATTACK> --chatflow_id <CHAT_ID>]-- CREDIT --------------------------------------- This vulnerability was discovered by: Dre Cura (@dre_cura) of TrendAI Research
Articles & Coverage 1
Zero Day Initiative Advisories
Executive ViewAI
Flowise versions 3.1.2 and earlier contain a critical remote code execution vulnerability allowing unauthenticated attackers to execute arbitrary code on the Flowise service account. With publicly available exploit code in circulation and no current evidence of active exploitation, this vulnerability poses an immediate risk to data confidentiality, integrity, and business continuity for any organization deploying Flowise. The attack requires no authentication or special network access, making it easily exploitable by any threat actor with knowledge of the target's deployment.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
More in Trend Micro
View allOn the Trend Micro Threat Discovery Appliance 2.6.1062r1, directory traversal when processing a session_id cookie allows
A command execution flaw on the Trend Micro Threat Discovery Appliance 2.6.1062r1 exists with the timezone parameter in
Proxy command injection vulnerability in Trend Micro OfficeScan 11 and XG (12) allows remote attackers to execute arbitr
Proxy command injection vulnerability in Trend Micro InterScan Messaging Virtual Appliance 9.0 and 9.1 allows remote att
Proxy command injection vulnerability in Trend Micro InterScan Messaging Virtual Appliance 9.0 and 9.1 allows remote att
SnmpUtils in Trend Micro Smart Protection Server 2.5 before build 2200, 2.6 before build 2106, and 3.0 before build 1330
An issue was discovered in Trend Micro InterScan Messaging Security (Virtual Appliance) 9.1-1600. Rated high severity (C
Trend Micro InterScan Messaging Security Virtual Appliance (IMSVA) 9.1 before CP 1644 has XSS. Rated medium severity (CV
SQL Injection vulnerabilities in Trend Micro Mobile Security (Enterprise) versions before 9.7 Patch 3 allow remote attac
The HTTP server in Trend Micro Password Manager allows remote web servers to execute arbitrary commands via the url para
The Gzip file parser in AVG Anti-Virus 10.0.0.1190, Bitdefender 7.2, Command Antivirus 5.2.11.5, Emsisoft Anti-Malware 5
The TAR file parser in AhnLab V3 Internet Security 2011.01.18.00, Avira AntiVir 7.11.1.163, Antiy Labs AVL SDK 2.0.3.7,
EUVD-2026-52910
GHSA-5xvg-pmgg-3mxr
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB