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

Flowise CVE-2026-40933: importar un chatflow compartido basta para una RCE

El análisis de Obsidian Security del 28 de mayo de 2026 muestra cómo el nodo Custom MCP de Flowise convierte una configuración MCP stdio en ejecución de código en el servidor — y cómo el simple hecho de importar un chatflow compartido puede activarla, sin guardar ni ejecutar.

2026-06-01 // 6 min affects: flowise

¿Qué es esto?

Flowise es un popular constructor open-source de tipo arrastrar y soltar para flujos de trabajo de LLM y agentes de IA (más de 52k estrellas en GitHub). Uno de sus bloques es el nodo Custom MCP, que permite a un chatflow conectarse a un servidor Model Context Protocol mediante una configuración JSON proporcionada por el usuario.

CVE-2026-40933 — «Flowise: Authenticated RCE Via MCP Adapters», publicada en la GitHub Advisory Database el 16 de abril de 2026 (GHSA-c9gw-hvqq-f33r) — recoge el hecho de que una configuración Custom MCP que usa el transporte stdio hace que el servidor de Flowise lance cualquier comando indicado en la configuración, sin sandbox. El 28 de mayo de 2026, Obsidian Security publicó un análisis detallado que destaca la parte más incómoda: un atacante no necesita convencer a la víctima de ejecutar nada. Importar un chatflow compartido puede bastar para activar la ejecución. La severidad revisada por GitHub es crítica; el vector CVSS 3.1 publicado es AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H. Las versiones afectadas son flowise y flowise-components <= 3.0.13; el aviso indica la corrección en 3.1.0.

Cómo funciona

El transporte MCP stdio es, por diseño, una primitiva de ejecución de código: al cliente se le entrega un command, args opcionales y un env, y lanza ese comando como proceso hijo para intercambiar JSON-RPC por la entrada/salida estándar. Cuando quien controla la configuración es un usuario de baja confianza — o un artefacto importado — esa primitiva se convierte en ejecución de código arbitrario en el host.

Flowise añadió una capa de validación de entradas (CUSTOM_MCP_SECURITY_CHECK) que permite mediante allowlist un puñado de lanzadores (node, npx, python, python3, docker), bloquea patrones de traversía y elimina metacaracteres de shell. El problema, documentado tanto por el aviso de GitHub como por Obsidian, es que un lanzador permitido combinado con un argumento que ejecuta código sigue ejecutando código. Conceptualmente:

{
  "command": "<allowlisted-launcher>",   // pasa el allowlist de comandos
  "args": ["<flag-that-evaluates-code>", "<REDACTED>"]
}

Los payloads exactos son públicos en el aviso y en el análisis de los investigadores; intencionadamente no se reproducen aquí. El punto es estructural: la validación de entradas reduce las rutas obvias hacia la ejecución pero no elimina la capacidad subyacente, porque el comportamiento malicioso puede expresarse dentro del espacio de entrada válido de la función.

La escalada «1-clic» es el hallazgo realmente novedoso. El nodo Custom MCP de Flowise tiene un desplegable «Available Actions» que enumera las herramientas que expone un servidor MCP configurado. Con stdio, enumerar herramientas significa arrancar el comando configurado — y esa enumeración se dispara cuando el chatflow importado se renderiza por primera vez en el lienzo. Así, una víctima que importa un chatflow compartido «prometedor» para ver qué hace puede activar la ejecución en el servidor antes de cualquier guardado o ejecución, sin ninguna solicitud de autorización. Obsidian lo probó en Flowise 3.1.2 e informó de que el endurecimiento basado en validación seguía siendo eludible en esa versión.

Esta es la instancia «plataforma de agentes» de un patrón más amplio que hemos cubierto: los prompts y configuraciones que se convierten en shells. Aquí la entrada no confiable no es un prompt sino un archivo de flujo de trabajo compartido.

Por qué importa

Flowise suele situarse en la capa de orquestación, conectado a bases de datos, claves de API y cuentas en la nube. La ejecución de código en ese proceso significa que toda credencial almacenada es legible y todo servicio conectado es alcanzable — en despliegues en contenedores el proceso a menudo corre como root, por lo que el radio de impacto es todo el contenedor y todo lo que pueda alcanzar.

La exposición no es teórica. Una falla Custom MCP anterior y distinta — CVE-2025-59528 (CVSS 10.0, una inyección de JavaScript vía el constructor Function(), corregida en 3.0.6) — vio su primera explotación en la naturaleza el 6 de abril de 2026, según VulnCheck, con unas 12 000 a 15 000 instancias de Flowise expuestas en Internet en ese momento. La misma clase de nodo ha producido ya varias CVE críticas y ataques activos. Flowise Cloud no está afectado porque allí stdio MCP está desactivado; el riesgo está en los despliegues autoalojados.

Defensas

  1. Desactive stdio MCP si no lo necesita. Defina CUSTOM_MCP_PROTOCOL=sse. Obsidian lo califica como la mitigación más eficaz; elimina la primitiva de ejecución en lugar de intentar filtrarla.
  2. No confíe solo en la validación de entradas. CUSTOM_MCP_SECURITY_CHECK está activado por defecto pero tiene elusiones documentadas. Trátelo como defensa en profundidad, no como la frontera.
  3. Actualice y luego verifique. Salga de flowise/flowise-components <= 3.0.13; el aviso indica 3.1.0 como corrección. Confirme además que está por encima de 3.0.6 para cerrar CVE-2025-59528. Vuelva a comprobar que su configuración ya no permite combinaciones de lanzador + flag de ejecución de código.
  4. Trate los chatflows importados como código no confiable. Un archivo JSON de chatflow compartido puede llevar una configuración MCP que se ejecuta al importar. Revise los chatflows antes de importarlos y nunca importe desde fuentes desconocidas en un servidor que contenga credenciales reales.
  5. Mantenga Flowise fuera de Internet. Colóquelo detrás de autenticación y una VPN/allowlist. Los recuentos de instancias expuestas de arriba explican por qué los escáneres las encuentran tan rápido.
  6. Aísle y aplique mínimo privilegio al runtime. Ejecute Flowise en un contenedor con sandbox bajo un usuario no-root, con filtrado de salida de red y credenciales de alcance limitado, para que un evento de ejecución de código MCP quede contenido en lugar de ser catastrófico.

Estado

ElementoReferenciaFechaNotas
Aviso CVE-2026-40933 (GHSA-c9gw-hvqq-f33r)GitHub Advisory Database2026-04-16RCE autenticada vía adaptadores MCP; afecta <= 3.0.13; corregido en 3.1.0; CWE-78
Análisis de Obsidian Security (RCE al importar, 1-clic)Obsidian Security2026-05-28La enumeración al importar dispara la ejecución; validación eludible en 3.1.2
CVE-2025-59528 (inyección Function() en Custom MCP)GitHub Advisory Database / NVD2025-09 → corregido 3.0.6CVSS 10.0; falla hermana en el mismo nodo
Explotación en la naturaleza de CVE-2025-59528VulnCheck vía CSO Online2026-04-06~12k–15k instancias expuestas; primera explotación observada

El encuadre que importa: con stdio MCP, quien influye en la configuración obtiene ejecución de código, y en una plataforma compartida eso incluye un archivo de chatflow que alguien importa. Filtrar argumentos estrecha la ruta; solo desactivar la primitiva o aislar el runtime la cierra.

Sources