Skip to content
Threat Feed
critical advisory

Remote Code Execution in Flowise CSVAgent via pandas.read_pickle

A critical remote code execution vulnerability (CVE-2026-69256) in the Flowise CSVAgent node allows attackers to bypass security filters by deserializing malicious pickled payloads using pandas.

What's new

  • 1. added detection rule: Detect Unauthenticated Access to OAuth2 Refresh Endpoint Aug 4, 17:25 via ghsa
  • 2. merged source coverage: Flowise SSRF Protection Bypass via IPv4-Mapped IPv6 Addresses Aug 4, 17:24 via ghsa
  • 3. merged source coverage: Flowise Unauthenticated Property Injection in Prediction API Aug 4, 17:24 via ghsa
  • 4. merged source coverage: Flowise Authorization Bypass in DELETE API Endpoint Aug 4, 17:24 via ghsa

Flowise versions 3.1.2 and below contain a remote code execution (RCE) vulnerability in the CSVAgent node (CVE-2026-69256). The component was designed to allow users to process CSV data via the pandas library while restricting potentially dangerous Python constructs through a denylist-based validation mechanism. However, the existing filter fails to account for the pandas read_pickle() function, which can be leveraged to deserialize arbitrary data. By crafting a malicious pickle payload that triggers OS-level execution (e.g., via os.system) and providing it through the customReadCSVFunc parameter, an attacker can bypass all configured security checks. Since the environment lacks standard I/O modules due to the filter, attackers can implement custom file-like classes to bridge the object into the read_pickle() function, successfully achieving full system command execution.

Attack Chain

  1. Attacker creates a malicious pickle object containing a payload designed to execute arbitrary shell commands (e.g., os.system).
  2. The payload is encoded in base64 to ensure successful transport within the Flowise input parameters.
  3. The attacker defines a custom Python class (e.g., MiniBytesIO) within the customReadCSVFunc parameter to simulate a file-like object, bypassing constraints on importing standard library I/O modules.
  4. The attacker injects the encoded pickle string into the read_pickle() call within the customReadCSVFunc parameter in the Flowise UI.
  5. The Flowise CSVAgent node accepts the user-supplied input, as it does not explicitly filter for read_pickle or the required pickle-loading logic.
  6. The pyodide execution environment processes the provided string and invokes pandas.read_pickle().
  7. The pickle deserialization occurs, triggering the __reduce__ method of the malicious object and executing the embedded shell commands.
  8. The attacker triggers the execution by sending a POST request to the prediction endpoint (/api/v1/prediction/<UUID>), resulting in unauthorized command execution on the host.

Impact

Successful exploitation of this vulnerability allows unauthenticated attackers to execute arbitrary commands with the privileges of the Flowise application process. This can lead to full system compromise, exfiltration of sensitive configuration or chat data, and potential lateral movement within the environment.

Recommendation

  • Upgrade Flowise and the flowise-components package to version 3.1.3 or higher to apply the vendor-provided patch.
  • Apply the following webserver detection rule to identify and block incoming requests targeting the prediction endpoint with suspicious customReadCSVFunc payloads.
  • Implement egress filtering on the Flowise host to restrict unexpected network connections originating from the application process, mitigating the impact of successful RCE (e.g., reverse shells).

Detection coverage 2

Detect CVE-2026-69256 Exploitation - pandas.read_pickle in CSVAgent

critical

Detects exploitation attempts against the CSVAgent node by monitoring for the use of read_pickle in user-supplied parameters to the prediction API.

sigma tactics: execution techniques: T1059.003 sources: webserver

Detect Unauthenticated Access to OAuth2 Refresh Endpoint

high

Detects potentially malicious unauthenticated requests to the Flowise OAuth2 refresh endpoint which should be protected by authentication.

sigma tactics: initial_access techniques: T1190 sources: webserver

Detection queries are available on the platform. Get full rules →