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
- Attacker creates a malicious pickle object containing a payload designed to execute arbitrary shell commands (e.g.,
os.system). - The payload is encoded in base64 to ensure successful transport within the Flowise input parameters.
- The attacker defines a custom Python class (e.g.,
MiniBytesIO) within thecustomReadCSVFuncparameter to simulate a file-like object, bypassing constraints on importing standard library I/O modules. - The attacker injects the encoded pickle string into the
read_pickle()call within thecustomReadCSVFuncparameter in the Flowise UI. - The Flowise CSVAgent node accepts the user-supplied input, as it does not explicitly filter for
read_pickleor the required pickle-loading logic. - The
pyodideexecution environment processes the provided string and invokespandas.read_pickle(). - The pickle deserialization occurs, triggering the
__reduce__method of the malicious object and executing the embedded shell commands. - 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
customReadCSVFuncpayloads. - 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
criticalDetects exploitation attempts against the CSVAgent node by monitoring for the use of read_pickle in user-supplied parameters to the prediction API.
Detect Unauthenticated Access to OAuth2 Refresh Endpoint
highDetects potentially malicious unauthenticated requests to the Flowise OAuth2 refresh endpoint which should be protected by authentication.
Detection queries are available on the platform. Get full rules →