Skip to main content

Flowise CVE-2026-70477

| EUVDEUVD-2026-52910 CRITICAL
Code Injection (CWE-94)
2026-08-04 https://github.com/FlowiseAI/Flowise GHSA-5xvg-pmgg-3mxr
9.5
CVSS 4.0 · Vendor: https://github.com/FlowiseAI/Flowise
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Reach exposed CSV Agent chatflow endpoint
  2. Delivery
    Submit prompt-injection prediction request
  3. Exploit
    LLM emits obfuscated Python payload
  4. Install
    Payload bypasses regex blocklist validator
  5. C2
    Code runs in unsandboxed pyodide
  6. Execute
    Execute commands as service account
  7. Impact
    Establish 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.

Act Now Prioritize within 24-48h. Why: CRITICAL severity + public POC available.
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv2 – 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)
v1 Aug 04, 2026 - 19:51

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

Flowise < 3.1.2

Affected Packages

npm flowise fix: 3.1.2, 3.1.3
npm flowise-components fix: 3.1.3

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

Vendor (https://github.com/FlowiseAI/Flowise) PRIMARY 9.5 CRITICAL
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
vuln.today AI 9.0 CRITICAL

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.

3.1 AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H

Primary rating from Vendor (https://github.com/FlowiseAI/Flowise).

CVSS VectorVendor: https://github.com/FlowiseAI/Flowise

Attack Vector
Network
Attack Complexity
High
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
High
Subsequent system: Integrity
High
Subsequent system: Availability
High

Lifecycle Timeline

2
CVSS changed
Aug 04, 2026 - 20:22 NVD
9.5 (CRITICAL)
CVE Published
Aug 04, 2026 - 19:29 cve.org
CRITICAL

DescriptionCVE.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:

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:

VariantTechniqueBypasses
0@exec decorator with string-concatenated __import__/\bexec\s*\(/, /\b__import__\s*\(/
1eval aliased to a variable, payload chr()-encoded/\beval\s*\(/, /\bimport\b/
2df.query() with chr()-encoded @__builtins__.__import__/\b__builtins__\b/, /\b__import__\s*\(/
3MRO traversal + __getattribute__ + __subclasses__ -> BuiltinImporter.load_module/\b__class__\b/, /\b__subclasses__\s*\(/, /\b__mro__\b/
4Generator frame inspection via gi_frame.f_globals['__loader__']/\b__loader__\b/, /\b__globals__\b/
5Exception traceback frame walk to f_builtins['__import__']/\b__globals__\b/, /\b__import__\s*\(/
6__build_class__.__self__.__getattribute__('__import__')/\b__import__\s*\(/
7vars 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

Executive ViewAI

Why It Matters

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.

Business Impact: Severe
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.4%
Top 64% exploitable
Prevalence
Medium
popular open-source LLM app builder, common in dev but not enterprise-ubiquitous
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Data Quality
7 sources
Confidence: High
EUVD 🇯🇵JVN NVD CVE.org EPSS Vulnrichment GHSA GitHub VulDB

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.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity + public POC available
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Out-of-Cycle
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact
Very High
Technical Impact
Total

Priority Score

68
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +48
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Code Injection CRITICAL

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.

CVE-2016-7552 CRITICAL POC
9.8 Apr 12

On the Trend Micro Threat Discovery Appliance 2.6.1062r1, directory traversal when processing a session_id cookie allows

CVE-2016-7547 CRITICAL POC
9.8 Apr 12

A command execution flaw on the Trend Micro Threat Discovery Appliance 2.6.1062r1 exists with the timezone parameter in

CVE-2017-11394 CRITICAL POC
9.8 Aug 03

Proxy command injection vulnerability in Trend Micro OfficeScan 11 and XG (12) allows remote attackers to execute arbitr

CVE-2017-11391 HIGH POC
8.8 Aug 03

Proxy command injection vulnerability in Trend Micro InterScan Messaging Virtual Appliance 9.0 and 9.1 allows remote att

CVE-2017-11392 HIGH POC
8.8 Aug 03

Proxy command injection vulnerability in Trend Micro InterScan Messaging Virtual Appliance 9.0 and 9.1 allows remote att

CVE-2016-6267 HIGH POC
8.8 Jan 30

SnmpUtils in Trend Micro Smart Protection Server 2.5 before build 2200, 2.6 before build 2106, and 3.0 before build 1330

CVE-2017-6398 HIGH POC
8.8 Mar 14

An issue was discovered in Trend Micro InterScan Messaging Security (Virtual Appliance) 9.1-1600. Rated high severity (C

CVE-2017-7896 MEDIUM POC
6.1 Apr 18

Trend Micro InterScan Messaging Security Virtual Appliance (IMSVA) 9.1 before CP 1644 has XSS. Rated medium severity (CV

CVE-2017-14078 CRITICAL
9.8 Sep 22

SQL Injection vulnerabilities in Trend Micro Mobile Security (Enterprise) versions before 9.7 Patch 3 allow remote attac

CVE-2016-3987 CRITICAL POC
9.8 Apr 12

The HTTP server in Trend Micro Password Manager allows remote web servers to execute arbitrary commands via the url para

CVE-2012-1461 MEDIUM
4.3 Mar 21

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

CVE-2012-1459 MEDIUM
4.3 Mar 21

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,

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy