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

Secuestro de flujos entre inquilinos en Langflow: el 9.9 que los atacantes ignoraron

Sysdig detectó el primer uso real de un fallo de Langflow que permite a un usuario ejecutar el flujo de otro inquilino — y sus secretos. Puntuado por encima del RCE vecino, apenas lo tocaron.

2026-07-03 // 6 min affects: langflow, ai-agent-builders, rag-pipelines, llm-orchestration

¿Qué es esto?

El 26 de junio de 2026, el equipo de Threat Research de Sysdig publicó la primera explotación documentada en el mundo real de un fallo entre inquilinos en Langflow, el marco visual de código abierto para construir agentes de IA y canalizaciones RAG. El fallo es una referencia directa a objetos insegura (IDOR) entre inquilinos: un usuario autenticado puede ejecutar el flujo de otro usuario — y heredar los secretos incrustados en él. Tiene una puntuación CVSS de 9.9, superior a la del fallo de ejecución remota de código sin autenticación explotado junto a él, puntuado en 9.3.

Lo más revelador es lo que el atacante no hizo. Sysdig observó a un único operador, el 25 de junio de 2026, lanzar ambos fallos contra la misma instancia expuesta. Concentró su esfuerzo en el RCE peor puntuado y trató el fallo entre inquilinos, mejor puntuado, como un añadido de dos peticiones. Este es un artículo de fondo sobre una clase de vulnerabilidad y una lección sobre cómo leer las puntuaciones CVSS, no un exploit accionable — ambos fallos están corregidos.

Cómo funciona

Langflow expone cada flujo como un «modelo» invocable a través de un endpoint compatible con OpenAI. Una petición a POST /api/v1/responses designa un flujo por su UUID en el campo model. El fallo residía en el asistente de resolución de flujos: cuando un flujo se resolvía por UUID, la consulta a la base de datos se ejecutaba sin comprobación de propiedad, de modo que cualquier llamante autenticado podía ejecutar el flujo de cualquier usuario. La ruta paralela que resuelve un flujo por su nombre de endpoint comprobaba la propiedad — solo la rama del UUID estaba expuesta.

Paso        Lo que hizo el operador
----------  ---------------------------------------------------
Enumerar    GET /api/v1/flows/  — un endpoint de listado que
            divulga los UUID de flujos de otros usuarios.
Secuestrar  POST /api/v1/responses  con model:<flujo-víctima>
            y un prompt inyectado en input, p. ej. «[REDACTED:
            instrucción de extracción de credenciales]».
Cosechar    El flujo de la víctima se ejecuta con sus claves
            incrustadas; el prompt inyectado las hace aflorar.

Un UUID de flujo es aleatorio y de 122 bits de ancho: imposible de forzar por fuerza bruta. Esa es toda la historia del fallo: por sí solo es inerte. Solo se vuelve explotable porque el endpoint de listado reparte precisamente los identificadores que la técnica necesita. La corrección, entregada en Langflow 1.9.1, añade la comprobación de propiedad que faltaba en la ruta del UUID.

Por qué importa

En una única máquina autoalojada, este fallo entre inquilinos no hace nada que el RCE vecino no pueda hacer ya — en cuanto se logra ejecución de código sin autenticación, se posee el proceso, la base de datos, el sistema de archivos y el entorno. Esa asimetría explica por qué el RCE fue explotado masivamente en 20 horas tras su divulgación de marzo, alcanzó unos 7000 servidores expuestos y figura en el catálogo de vulnerabilidades explotadas conocidas (KEV) de CISA, mientras que el fallo entre inquilinos, mejor puntuado, no tenía hasta ahora ninguna explotación reportada. Los atacantes optimizan el rendimiento por unidad de esfuerzo, y un RCE sin autenticación y rociable por todo Internet gana siempre.

La excepción es el Langflow multiinquilino o gestionado. Ahí, el RCE se ejecuta en un entorno aislado por inquilino — alcanzar a otro cliente exige una fuga del sandbox. El fallo entre inquilinos, en cambio, cruza esa frontera en la capa de aplicación, a través de la ruta de ejecución bendecida por la plataforma, ejecutando el flujo de la víctima con sus credenciales. Sin compromiso del host, sin fuga, y parece una llamada de API legítima cuya única anomalía es un identificador de flujo «equivocado». Resulta así más impactante y más silencioso precisamente donde el RCE está contenido. Y los flujos de Langflow merecen ser objetivo: incrustan habitualmente claves de proveedores de LLM, credenciales de nube y secretos de base de datos directamente en la configuración de los componentes.

Defensas

Nada aquí exige un control inédito — hace falta parchear y tratar la autorización como una propiedad de la capa de datos, no de la red.

  1. Actualice a Langflow 1.9.1 o posterior, que añade la comprobación de propiedad. Parchee el RCE sin autenticación en el mismo paso — es el fallo que se está rociando a escala de Internet.
  2. Trate los endpoints que divulgan identificadores de objetos como parte de la superficie de ataque. El fallo entre inquilinos es inerte sin un UUID de flujo filtrado; el endpoint de listado demasiado hablador es lo que lo arma. Restrinja los listados a los objetos del propio llamante.
  3. No exponga Langflow a Internet, y desactive cualquier valor por defecto sin autenticación o de inicio de sesión automático. Colóquelo tras controles de red autenticados.
  4. Operadores multiinquilino: apliquen la autorización en la capa de datos, no solo mediante el aislamiento por sandbox. Den a la corrección de nivel de aplicación la urgencia que implica el 9.9 — el sandbox no detiene una ruptura de inquilino en la aplicación.
  5. Dejen de incrustar secretos de larga vida en la configuración de los flujos. Usen credenciales cortas y de alcance limitado desde un gestor de secretos, y roten cualquier clave que haya residido en una instancia expuesta.
  6. Añadan detección en tiempo de ejecución de la enumeración de flujos seguida de ejecución entre propietarios, y de prompts cuya intención sea hacer aflorar credenciales.

Status

ElementoReferenciaFechaNotas
Secuestro de flujo entre inquilinosCVE-2026-552552026IDOR CVSS 9.9; corregido en Langflow 1.9.1
Primera explotación realSysdig TRT2026-06-25Enumeración → secuestro, 2 peticiones; sin explotación previa
RCE sin autenticación vecinoCVE-2026-330172026-03CVSS 9.3; CISA KEV 2026-03-25; ~7000 servidores afectados
Investigación públicaSysdig TRT2026-06-26Análisis comparado del esfuerzo en ambos fallos

La conclusión no es que una puntuación CVSS alta esté equivocada — es que una puntuación mide el impacto en el peor caso, no la explotabilidad. Un 9.9 que exige autenticación, un identificador de objeto filtrado y un objetivo multiinquilino pierde, en la práctica, frente a un 9.3 al que cualquiera llega con solo acceso de red. Parchee ambos, pero lea la puntuación por lo que es.

Sources