/

CVE-2026-69256

Severity:

HIGH RISK

(8.8)

Code Injection (CWE-94) in Flowise CSVAgent Component

CVE-2026-69256

Analyzed

Vulnerability type

Category:

Code Injection

CWE:

CWE-94

Impact:

Remote Code Execution

Severity:

HIGH RISK

(8.8)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Flowise's CSVAgent node allows authenticated users with chatflow management access to provide Python-related code that is evaluated through Pyodide. Because a denylist can be bypassed through pandas pickle deserialization, a crafted chatflow may execute arbitrary commands when its prediction endpoint is triggered.

Flowise's CSVAgent node allows authenticated users with chatflow management access to provide Python-related code that is evaluated through Pyodide. Because a denylist can be bypassed through pandas pickle deserialization, a crafted chatflow may execute arbitrary commands when its prediction endpoint is triggered.

Affected context

The vulnerability occurs in Flowise deployments using the CSVAgent node, where the custom CSV-reading function supplied through Additional Parameters is incorporated into a pandas expression and evaluated in a Pyodide runtime. Risk exists when an authenticated user can create or modify chatflows and subsequently cause the affected flow to execute.

The vulnerability occurs in Flowise deployments using the CSVAgent node, where the custom CSV-reading function supplied through Additional Parameters is incorporated into a pandas expression and evaluated in a Pyodide runtime. Risk exists when an authenticated user can create or modify chatflows and subsequently cause the affected flow to execute.

Exploit preconditions

  • Attack surface: Flowise chatflow configuration and prediction APIs
  • Required access: Authenticated permission to create or modify a chatflow
  • Trigger point: Execution of a configured CSVAgent flow through its prediction endpoint
  • Why exploitation is possible: User-controlled code reaches an evaluated Pyodide context, while denylist filtering does not comprehensively prevent dangerous deserialization behavior
  • Attack surface: Flowise chatflow configuration and prediction APIs
  • Required access: Authenticated permission to create or modify a chatflow
  • Trigger point: Execution of a configured CSVAgent flow through its prediction endpoint
  • Why exploitation is possible: User-controlled code reaches an evaluated Pyodide context, while denylist filtering does not comprehensively prevent dangerous deserialization behavior

Why this happens

The underlying bug is the evaluation of user-controlled CSV-processing expressions in a runtime capable of executing Python behavior. The defensive denylist focuses on selected dangerous words or constructs rather than enforcing a restricted operation set, allowing an alternate pandas deserialization path to bypass those checks. This maps to CWE-94, Improper Control of Generation of Code, because untrusted input influences executable code semantics.

The underlying bug is the evaluation of user-controlled CSV-processing expressions in a runtime capable of executing Python behavior. The defensive denylist focuses on selected dangerous words or constructs rather than enforcing a restricted operation set, allowing an alternate pandas deserialization path to bypass those checks. This maps to CWE-94, Improper Control of Generation of Code, because untrusted input influences executable code semantics.

Potential impact

  • An attacker may execute arbitrary commands within the Flowise service context
  • Application data and configured chatflows could be modified or exposed
  • Service credentials or connected data sources could be accessed
  • The host or surrounding environment could be affected depending on process privileges
  • The vulnerable flow could be used to facilitate lateral movement or persistence
  • An attacker may execute arbitrary commands within the Flowise service context
  • Application data and configured chatflows could be modified or exposed
  • Service credentials or connected data sources could be accessed
  • The host or surrounding environment could be affected depending on process privileges
  • The vulnerable flow could be used to facilitate lateral movement or persistence

General mitigation guidance

Mitigation generally focuses on removing executable behavior from user-defined

CSV processing and treating chatflow configuration as untrusted input.

Common defensive patterns include:

  • Replace dynamic expression evaluation with a fixed allowlist of supported CSV operations
  • Reject arbitrary Python expressions and unsafe deserialization formats
  • Use data-only parsers and disable pickle-based loading for user-controlled content
  • Apply strict schema validation and canonicalization before configuration is stored or executed
  • Separate flow-editing permissions from execution permissions and enforce least privilege
  • Run processing workers with minimal filesystem, network, and operating-system privileges
  • Isolate user-supplied processing in constrained sandboxes with appropriate resource limits

Mitigation generally focuses on removing executable behavior from user-defined

CSV processing and treating chatflow configuration as untrusted input.

Common defensive patterns include:

  • Replace dynamic expression evaluation with a fixed allowlist of supported CSV operations
  • Reject arbitrary Python expressions and unsafe deserialization formats
  • Use data-only parsers and disable pickle-based loading for user-controlled content
  • Apply strict schema validation and canonicalization before configuration is stored or executed
  • Separate flow-editing permissions from execution permissions and enforce least privilege
  • Run processing workers with minimal filesystem, network, and operating-system privileges
  • Isolate user-supplied processing in constrained sandboxes with appropriate resource limits

How teams detect issues like this

Organizations can identify similar issues through:

  • Static analysis rules for dynamic evaluation, Pyodide execution, and unsafe deserialization APIs
  • Code review checks for denylist-based validation of executable input
  • Searches for user-controlled values incorporated into Python, JavaScript, or expression evaluators
  • Monitoring for unexpected chatflow changes and unusual prediction requests
  • Policy enforcement that blocks pickle loading and arbitrary code execution in application services
  • Automated security review tools that flag tainted data reaching interpreters or deserializers

Organizations can identify similar issues through:

  • Static analysis rules for dynamic evaluation, Pyodide execution, and unsafe deserialization APIs
  • Code review checks for denylist-based validation of executable input
  • Searches for user-controlled values incorporated into Python, JavaScript, or expression evaluators
  • Monitoring for unexpected chatflow changes and unusual prediction requests
  • Policy enforcement that blocks pickle loading and arbitrary code execution in application services
  • Automated security review tools that flag tainted data reaching interpreters or deserializers

Sources

SourceLink
github.comgithub.com/FlowiseAI/Flowise/commit/c79fe56a6c249850e96bce9b4859f7a0083e4507
github.comgithub.com/FlowiseAI/Flowise/pull/6257
github.comgithub.com/FlowiseAI/Flowise/releases/tag/flowise@3.1.3
github.comgithub.com/FlowiseAI/Flowise/security/advisories/GHSA-x6vm-w76m-8j7g

Frequently asked

questions

It can be remotely exploitable within a Flowise deployment when an authenticated

user has permission to create or modify chatflows and can trigger the affected flow.

Not necessarily. The essential requirement is sufficient authenticated access to

configure a CSVAgent node and execute the resulting chatflow; the exact scope

depends on deployment permissions.

Remove dynamic code evaluation from CSV processing, permit only explicitly

supported operations, and prohibit unsafe deserialization of user-controlled

data.

Treat chatflow configuration as untrusted, use positive allowlists instead of

denylists, apply strict authorization, and continuously scan code for interpreter

and deserialization boundaries.

It can be remotely exploitable within a Flowise deployment when an authenticated

user has permission to create or modify chatflows and can trigger the affected flow.

Not necessarily. The essential requirement is sufficient authenticated access to

configure a CSVAgent node and execute the resulting chatflow; the exact scope

depends on deployment permissions.

Remove dynamic code evaluation from CSV processing, permit only explicitly

supported operations, and prohibit unsafe deserialization of user-controlled

data.

Treat chatflow configuration as untrusted, use positive allowlists instead of

denylists, apply strict authorization, and continuously scan code for interpreter

and deserialization boundaries.

Find out what's already
exploitable in your codebase.