sistema: OPERATIVO
← volver a todos los hacks
AGENTS CRITICAL NEW

Flowise CVE-2026-41264: código pandas escrito por el LLM que llega a RCE

Una prompt injection en el agente CSV de Flowise lleva al modelo a generar Python que evade una lista negra de expresiones regulares y ejecuta comandos del SO. Divulgada el 15 de abril de 2026, corregida en 3.1.0.

2026-06-15 // 6 min affects: flowise, flowise-components

¿Qué es esto?

CVE-2026-41264 es un fallo de ejecución remota de código (RCE) en el nodo CSV Agent de Flowise, el popular constructor open source low-code de aplicaciones y agentes LLM. Fue reportado por Dre Cura y Nicholas Zubrisky de la Zero Day Initiative de Trend Micro (ZDI-CAN-29411), publicado en el aviso del fabricante el 15 de abril de 2026 e incorporado a las bases de avisos de GitHub y GitLab el 21 de abril. Afecta a flowise y flowise-components hasta la versión 3.0.13 incluida y está corregido en 3.1.0. La ZDI lo puntúa 9,8 (CVSS v3.1); GitHub lo puntúa 9,2 (CVSS v4). Por la vía de la prompt injection, no se requiere autenticación.

Lo interesante no es que un agente ejecute código —esa es la función misma del nodo— sino cómo el fallo sobrevive a un control de seguridad escrito específicamente para detenerlo. CVE-2026-41264 es una evasión del parche entregado para la anterior CVE-2026-41137.

Cómo funciona

El CSV Agent responde preguntas sobre un archivo CSV pidiendo al modelo que escriba código pandas y ejecutando luego ese código en un runtime Pyodide (Python WebAssembly dentro del proceso). El prompt del sistema instruye amablemente al modelo a producir solo operaciones pandas/numpy y a evitar import, os, subprocess, eval y similares. Esa instrucción no es una frontera de seguridad: es texto del que se puede convencer al modelo de prescindir.

El control real es una función, validatePythonCodeForDataFrame(), que pasa la salida del modelo por una lista de expresiones regulares prohibidas (FORBIDDEN_PATTERNS) antes de ejecutarla. Es una lista negra, y la clasificación del aviso lo dice todo: CWE-184, Lista incompleta de entradas no permitidas. Uno de los patrones, /\bimport\s+(?!pandas|numpy\b)/g, intenta prohibir importar cualquier cosa que no sea pandas o numpy, y otro (/\bos\./g) intenta bloquear el módulo os. Ambos caen ante un único truco de alias documentado en el aviso:

# Evasión conceptual del aviso público de ZDI — corregida en 3.1.0
import pandas as np, os as pandas   # 'os' se importa bajo el alias 'pandas'
pandas.system("[REDACTED]")         # 'pandas.system(...)' es en realidad os.system(...)

Como la línea empieza por import pandas, el patrón de import queda satisfecho; como la llamada peligrosa se escribe pandas.system(...), el patrón \bos\. nunca coincide. Se induce al modelo a producir esto mediante una redacción de prompt injection corriente insertada en la pregunta del usuario (el campo {question} del prompt del sistema). El entorno Pyodide no está aislado a nivel del SO, por lo que la llamada se ejecuta en el contexto del usuario que corre el servidor Flowise.

La ZDI documenta tres vías de explotación en su prueba de concepto: una prompt injection no autenticada enviada al endpoint de predicción de un chatflow; un atacante autenticado que conecta el CSV Agent a un servidor de modelo malicioso que simplemente devuelve «código» hostil; y la primitiva del servidor malicioso por sí sola. La PoC señala una advertencia realista para los fallos de LLM: como la salida es probabilística, «puede requerir varios intentos o una técnica de prompt injection distinta según el modelo usado» —probaron con Llama 3.2 vía Ollama.

Por qué importa

Es el patrón del trío letal en su forma más afilada: entrada no confiable (la pregunta, y el propio CSV), una capacidad potente (la ejecución de código) y un modelo que decide qué ejecutar. Flowise está ampliamente desplegado y a menudo expuesto a Internet, de modo que un nodo pensado para «responder preguntas sobre una hoja de cálculo» se convierte en una vía hacia el compromiso total del host —incluidas las claves de API de proveedores y las credenciales de nube que el servidor posea. La lección de fondo va mucho más allá de Flowise: una instrucción en lenguaje natural dentro de un prompt del sistema no es un control de acceso, y una lista negra de expresiones regulares sobre un lenguaje Turing-completo es una batalla perdida. Python ofrece innumerables caminos hacia una capacidad (alias, recorrido de atributos, reflexión vía __class__/__subclasses__), y el validador solo puede bloquear las grafías que sus autores imaginaron.

Defensas

No pongas el código en lista negra: aísla el runtime. El arreglo duradero es el aislamiento a nivel del SO: ejecuta el código generado por el modelo, no confiable, en un proceso o contenedor separado, sin red, con sistema de archivos de solo lectura, capacidades eliminadas y límites seccomp. Pyodide dentro del proceso comparte el alcance del host y no es, por sí solo, una frontera de seguridad.

Prefiere listas blancas y ejecución sin código. Cuando sea factible, no permitas que el modelo emita código libre. Restríngelo a un conjunto validado de operaciones de DataFrame, o haz que produzca una consulta estructurada que tu código valide y ejecute —una lista blanca de lo permitido en lugar de una lista negra de lo prohibido.

Trata los archivos de datos como vectores de inyección. El contenido del CSV (y los nombres de columna) fluyen hacia el prompt, así que una hoja de cálculo no confiable puede portar instrucciones igual que un mensaje de usuario. Valídalos, entrecomíllalos y aíslalos.

Parchea e inventaría. Actualiza Flowise a 3.1.0 o posterior, que cierra la brecha prohibiendo todos los imports en el CSV Agent. Luego localiza tus instancias expuestas: Flowise no debería estar en la Internet pública sin autenticación ni controles de tráfico de red.

Mínimo privilegio para el host del agente. Ejecuta Flowise como un usuario sin privilegios, acota estrechamente sus claves de API y segméntalo de los endpoints de metadatos de la nube para que un único RCE no se convierta en un robo de credenciales.

Estado

ElementoDetalle
CVECVE-2026-41264 (GHSA-3hjv-c53m-58jj)
Afectadosflowise, flowise-components ≤ 3.0.13
Corregido3.1.0 (todos los imports prohibidos en el CSV Agent)
Severidad9,8 CVSS v3.1 (ZDI) / 9,2 CVSS v4 (GitHub); CWE-184
Autenticación requeridaNo (vía prompt injection)
Reportado porDre Cura y Nicholas Zubrisky, Trend Micro ZDI
Aviso del fabricante15 de abril de 2026
RelaciónEvasión del parche de CVE-2026-41137

Sources