CVE
CVE-2025-34291
CWE
CWE-346
Sistemas afectados
- Versiones del paquete PyPI langflow hasta la 1.6.9
- Despliegues de Langflow que usan CORS con comodín y solicitudes con credenciales
- Despliegues de Langflow con cookies refresh_token_lf configuradas como SameSite=None
- Plataformas autogestionadas de flujos de trabajo de agentes de IA que exponen sesiones de Langflow a usuarios de navegador
- Espacios de trabajo de Langflow que almacenan claves de API, credenciales de base de datos, tokens de proveedores de modelos o credenciales en la nube
CISA añadió CVE-2025-34291 al catálogo de vulnerabilidades explotadas conocidas el 21 de mayo de 2026. La vulnerabilidad afecta a Langflow, el framework visual basado en Python/FastAPI para crear agentes y flujos de trabajo de IA. El paquete afectado es langflow en PyPI, con versiones vulnerables hasta la 1.6.9.
El problema es una cadena, no un fallo aislado. Una política de CORS permisiva permite solicitudes cruzadas con credenciales, la cookie de token de renovación se envía en contextos entre sitios, y Langflow expone funcionalidad autenticada que puede ejecutar código Python como parte de la validación de flujos de trabajo y componentes personalizados.
Esa combinación convierte una visita del navegador en un compromiso de la aplicación:
la víctima tiene una sesión activa de Langflow
-> la víctima visita una página controlada por el atacante
-> el navegador envía refresh_token_lf a /api/v1/refresh
-> el atacante lee access_token y refresh_token recién generados
-> el atacante llama a las APIs autenticadas de Langflow
-> la funcionalidad de ejecución de código se ejecuta en el contexto del servidor de Langflow
Paquete afectado
El paquete afectado es langflow:
- Vulnerable:
langflow <= 1.6.9 - Línea corregida:
langflow >= 1.7.0 - Objetivo de endurecimiento actual del proyecto durante esta investigación: actualizar a la última versión estable, incluida la
1.9.3
La exposición práctica depende de la configuración, pero los valores predeterminados vulnerables son lo que hizo explotable la cadena. Obsidian y VulnCheck describen la configuración de riesgo así:
allow_origins = ["*"]
allow_credentials = True
combinada con una cookie de renovación que se comporta así:
Set-Cookie: refresh_token_lf=...; SameSite=None; Secure
Si se permite que un navegador envíe esa cookie desde un origen controlado por el atacante y la respuesta es legible a través de CORS, el atacante puede convertir una solicitud tipo CSRF en robo de tokens.
La ruta de renovación vulnerable
El endpoint importante es:
POST /api/v1/refresh
El endpoint confía en la cookie de token de renovación como su mecanismo de autenticación. Con SameSite=None, los navegadores incluyen refresh_token_lf en solicitudes entre sitios sobre HTTPS. Con CORS de comodín y credenciales, la página del atacante puede leer la respuesta JSON que contiene los tokens recién generados.
Un flujo de exploit simplificado se ve así:
const response = await fetch('https://langflow.example.com/api/v1/refresh', {
method: 'POST',
credentials: 'include',
});
const tokens = await response.json();
En un despliegue seguro, esa solicitud debería fallar por al menos una razón: el navegador no debería enviar la cookie entre sitios, el origen no debería estar permitido, o el endpoint de renovación debería requerir un valor anti-CSRF no disponible para el atacante. La cadena vulnerable permite la solicitud y expone la respuesta.
Por qué el robo de tokens se convierte en RCE
Langflow ya había puesto las rutas de mayor riesgo del estilo /api/v1/validate/code detrás de autenticación tras trabajo previo de RCE. CVE-2025-34291 elude ese límite de seguridad al obtener un token válido desde el navegador de la víctima.
El análisis de Obsidian describe la superficie de ejecución de código central como la validación de código Python para componentes personalizados. El patrón peligroso es que la validación de funciones de Python aún puede ejecutar construcciones de Python como argumentos predeterminados y decoradores. En un producto de constructor de flujos de trabajo, la ejecución de código autenticada puede ser una funcionalidad prevista, pero la autenticación se convierte en el único muro entre un secuestro de tokens basado en navegador y la ejecución de código del lado del servidor.
El impacto es mayor que el proceso de Langflow. Los espacios de trabajo de Langflow suelen almacenar claves de API de proveedores, credenciales de base de datos, tokens SaaS, credenciales de bases de datos vectoriales, secretos en la nube y datos internos de flujos de trabajo. Una vez que el atacante obtiene ejecución de código o acceso a la API dentro del espacio de trabajo, esos sistemas conectados pueden convertirse en el verdadero radio de impacto.
Señal de explotación
La entrada del KEV de CISA es la señal de priorización más fuerte para los defensores. CrowdSec también informó de explotación activa desde enero de 2026 y señaló un desafío de atribución específico de este fallo: como las solicitudes las emite el navegador de la víctima, los registros del defensor a menudo muestran IPs residenciales o de usuarios legítimos en lugar de infraestructura del atacante.
Eso significa que el bloqueo basado en IP no es suficiente. Un exploit exitoso puede parecer una sesión de usuario válida llamando a /api/v1/refresh, seguida de un uso autenticado normal de la API desde el contexto del navegador de la víctima o desde tokens recién robados.
Qué buscar
Prioriza las instancias de Langflow alcanzables externamente y compartidas internamente, especialmente las que se usan para experimentación con IA, automatización de flujos de trabajo o herramientas internas.
Comprobaciones de configuración:
python -m pip show langflow
env | rg '^LANGFLOW_CORS|^LANGFLOW_REFRESH'
Los valores de riesgo incluyen:
LANGFLOW_CORS_ORIGINS=*
LANGFLOW_CORS_ALLOW_CREDENTIALS=true
LANGFLOW_REFRESH_SAME_SITE=none
La investigación de respuestas debería incluir:
- Registros de acceso para solicitudes
POST /api/v1/refreshentre orígenes. - Cabeceras
Originque no coinciden con los hosts de frontend aprobados. - Ráfagas de renovación de tokens seguidas de llamadas a
/api/v1/validate/codeo de validación de componentes personalizados. - Flujos nuevos o modificados que incluyen código Python sospechoso.
- Lecturas de variables del espacio de trabajo, claves de API o secretos de integración después de actividad de renovación inusual.
- Conexiones de red salientes desde el servidor de Langflow después de la validación de código autenticada.
Como el exploit depende de un navegador con sesión iniciada, la formación de usuarios y los controles antiphishing ayudan, pero no son suficientes. La aplicación debe aplicar ella misma los límites de origen y CSRF.
Remediación
Actualiza Langflow. Usa al menos la 1.7.0, y prefiere la última versión estable tras verificar la compatibilidad:
python -m pip install --upgrade langflow
python -m pip show langflow
Para despliegues en contenedores:
docker pull langflowai/langflow:1.9.3
Luego endurece explícitamente la configuración del despliegue:
export LANGFLOW_CORS_ORIGINS="https://app.example.com,https://langflow.example.com"
export LANGFLOW_CORS_ALLOW_CREDENTIALS=true
export LANGFLOW_REFRESH_SAME_SITE=lax
Si los orígenes con comodín son inevitables en un entorno no productivo, no permitas solicitudes con credenciales:
export LANGFLOW_CORS_ORIGINS="*"
export LANGFLOW_CORS_ALLOW_CREDENTIALS=false
Los despliegues de producción deberían evitar las credenciales predeterminadas, aislar Langflow de orígenes de navegador no confiables y tratar las variables de flujo de trabajo almacenadas como secretos. Si se sospecha explotación, rota:
- Las credenciales de usuario y claves de API de Langflow.
- Las claves de proveedores de modelos.
- Las credenciales de base de datos.
- Las credenciales del almacén vectorial.
- Los tokens SaaS y en la nube almacenados en variables del espacio de trabajo.
- Cualquier secreto alcanzable desde el entorno del proceso del servidor de Langflow.
Revisa también si las funciones de ejecución de código son necesarias para cada despliegue. Si Langflow se usa solo para flujos de trabajo sin código, restringe o aísla la validación y ejecución de componentes personalizados detrás de controles adicionales.
De la investigación a la remediación
Comprueba si este patrón existe en tu código
Convierte esta investigación en un flujo de remediación. Analiza dependencias y manifiestos para detectar riesgos similares en la cadena de suministro y prioriza las correcciones con contexto de alcanzabilidad.
Referencias
- CISA KEV: CVE-2025-34291
- NVD: CVE-2025-34291
- Obsidian Security: toma de control de cuentas y RCE en Langflow
- VulnCheck: configuración errónea de CORS en Langflow hasta secuestro de tokens y RCE
- CrowdSec: CVE-2025-34291 explotada activamente
- Langflow issue 11465: consulta sobre el parche de CVE-2025-34291
- Lanzamiento de seguridad de Langflow v1.9.3
- CWE-346 Error de validación de origen