Neutron, nuestro motor de IA, obtuvo un 97.1% en el benchmark CyberGym de UC Berkeley. Más información

Análisis a fondo

Análisis a fondo

Omisión de autenticación de superusuario por auto-login en Langflow y RCE vía MCP (CVE-2026-93680)

Langflow OSS 1.0.0 a 1.12.8 entrega una sesión de superusuario a cualquier llamador que conduce a RCE mediante sus herramientas MCP; corregido en 1.13.0.

Resumen

  • Las versiones 1.0.0 a 1.12.8 de Langflow OSS se distribuyen con el inicio de sesión automático activado por defecto, y un único GET /api/v1/auto_login sin autenticar devuelve una sesión de superusuario completa. IBM puntúa la falla, CVE-2026-93680, con 9.8 Crítica.
  • Desde esa sesión, el mismo atacante sin autenticar llega al endpoint MCP de Langflow, enumera sus herramientas de creación y ejecución de flujos y ejecuta código de componentes personalizados en el servidor: CVE-2026-110186, también 9.8 Crítica. Una falla relacionada, CVE-2026-110193, permite a una cuenta con pocos privilegios llegar a la ejecución de comandos del sistema operativo mediante el Asistente Agéntico.
  • Langflow 1.13.0, publicada el 22 de octubre de 2026, corrige todo al desactivar el inicio de sesión automático por defecto; el boletín de IBM del 28 de octubre no ofrece solución alternativa. La única versión corregida es la 1.13.0.
  • No se ha reportado explotación de estas CVE y ninguna figura en el catálogo de vulnerabilidades explotadas de CISA al 30 de octubre de 2026. La falla anterior de autenticación faltante de Langflow, CVE-2025-3248, fue explotada y está en el catálogo con uso conocido en campañas de ransomware, así que las instancias expuestas deben actualizarse ahora.

¿Estoy afectado?

Deben cumplirse todas estas condiciones para la cadena sin autenticar:

  • Ejecuta Langflow OSS, instalado desde PyPI, Docker o un archivo de versión, en cualquier versión de la 1.0.0 a la 1.12.8.
  • La instancia es alcanzable por alguien en quien no confía plenamente: expuesta a internet, en una red interna compartida, o alcanzable desde una red de contenedores.
  • No fijó explícitamente LANGFLOW_AUTO_LOGIN=false ni creó un superusuario real. El valor por defecto de cada versión afectada es activado, que es la configuración vulnerable.

La ruta con pocos privilegios, CVE-2026-110193, solo necesita una cuenta autenticada en la instancia, de cualquier rol, más el Asistente Agéntico generando código de componentes. CVE-2026-110192 necesita una cuenta autenticada y expone claves API inyectadas por el operador.

Rama Versiones afectadas Versión corregida
Langflow OSS 1.0.0 a 1.12.8 1.0.0 a 1.12.8 1.13.0

Compruebe lo que ejecuta. Para una instalación pip:

pip show langflow | head -2

Para el despliegue habitual en Docker, compruebe el contenedor en ejecución, no una imagen recién descargada:

docker exec langflow python -c "import langflow; print(langflow.__version__)"

Compruebe si el inicio de sesión automático está activo en la instancia. Haga la petición desde un equipo que usted controle:

curl -s -o /dev/null -w "%{http_code}\n" http://your-langflow-host:7860/api/v1/auto_login

Un 403 significa que el inicio de sesión automático está desactivado y la ruta sin autenticar está cerrada. Un 200 significa que el endpoint acaba de entregar una sesión de superusuario a su petición, que es la vulnerabilidad; usted ya controla la instancia, así que la comprobación no cuesta nada. Un ajuste explícito aparece en el entorno, pero una variable sin definir significa que se aplica el valor por defecto de la versión, que de 1.0.0 a 1.12.8 es activado:

docker exec langflow printenv | grep -i AUTO_LOGIN || echo "not set: the release default (on) applies"

¿Cómo lo corrijo?

Actualice a 1.13.0, la única versión corregida, antes de que cualquier otra cosa llegue a la instancia.

  1. Haga una copia de seguridad de la base de datos, la clave secreta y los archivos subidos, como indica el boletín de IBM.
  2. Si el despliegue usa el inicio de sesión automático, prepare primero la cuenta existente para el acceso con contraseña, siguiendo las instrucciones de instalación y actualización de Docker que enlaza el boletín. Omitir este paso lo deja fuera tras la actualización, porque 1.13.0 ya no inicia sesión automáticamente.
  3. Actualice el paquete:
pip install --upgrade "langflow==1.13.0"
  1. Para despliegues de Docker, descargue la imagen corregida y recree el contenedor, conservando los datos persistentes:
docker pull langflowai/langflow:1.13.0

El boletín de IBM no proporciona ninguna solución alternativa para ninguna de las CVE. El paso que reduce la exposición mientras programa la actualización es retirar el acceso de red no confiable a la instancia, mediante reglas de cortafuegos o segmentación de red. Eso cierra la cadena sin autenticar, pero no CVE-2026-110193, que funciona desde una cuenta autenticada.

¿Cuál es la causa raíz?

Un endpoint sin autenticar ha estado entregando sesiones de superusuario siempre que un indicador activado por defecto queda sin tocar. El indicador y el endpoint provienen de capas distintas del código, y una corrección anterior cerró solo parte de la ruta.

El ajuste vive en la configuración de la versión, src/lfx/src/lfx/services/settings/auth.py en v1.12.8, y cada versión afectada lo trae activado por defecto:

AUTO_LOGIN: bool = Field(
    default=True,  # TODO: Set to False in v2.0
    description=(
        "Enable automatic login with a configured or generated bootstrap account. "
        "SECURITY WARNING: This bypasses authentication and should only be used in development environments. "
        "Set to False in production. This will default to False in v2.0."
    ),
)
"""If True, the application will attempt to log in automatically as a super user."""

El endpoint es GET /api/v1/auto_login, en src/backend/base/langflow/api/v1/login.py. Con el indicador activado, resuelve un superusuario y devuelve los tokens de sesión como cookies, sin credencial alguna en la petición:

@router.get("/auto_login", include_in_schema=False)
async def auto_login(request: Request, response: Response, db: DbSession):
    auth_settings = get_settings_service().auth_settings

    if auth_settings.AUTO_LOGIN:
        auth = get_auth_service()
        user_id, tokens = await auth.create_user_longterm_token(db)
        ...
        response.set_cookie(
            auth_cookie_name("access_token_lf", request),
            tokens["access_token"],
            ...

La función detrás, create_user_longterm_token en src/backend/base/langflow/services/auth/service.py, busca el superusuario configurado, o el primero de la base de datos, y emite sus tokens.

Un comentario en esa función registra la corrección anterior, referenciada como GHSA-fjgc-vj2f-77hm: antes de ella, el endpoint emitía un token portador de superusuario de 365 días; después, un token de acceso de corta duración más un token de refresco. Esa remediación limitaba la vida del token, pero dejaba el endpoint emitiendo sesiones de superusuario a llamadores anónimos, lo que el boletín de IBM llama una remediación incompleta del control de inicio de sesión automático.

Un archivo de constantes del mismo servicio confirma el hueco por el lado de las claves API: desde la v1.5, LANGFLOW_AUTO_LOGIN exige una clave API válida en las rutas autenticadas por clave, mientras la ruta /auto_login siguió emitiendo sesiones. Una cadena de advertencia declara sin rodeos que, con el indicador activado, /auto_login emite una sesión de superusuario sin credenciales.

La segunda falla, CVE-2026-110186, es la mitad de ejecución de código de la cadena. El endpoint MCP de Langflow en /api/v1/agentic/mcp expone las herramientas de creación y ejecución de flujos, y los flujos pueden contener componentes personalizados, que son código Python que Langflow ejecuta en el servidor. Las rutas autentican al llamador con el mismo mecanismo de sesión que satisface el endpoint de auto-login, así que la cadena sin autenticar es: petición anónima, sesión de superusuario, herramientas MCP, código de componente, ejecución en el servidor.

¿Cómo se explota?

No existe una prueba de concepto pública para ninguna de las CVE de octubre de 2026. Los pasos siguientes reconstruyen la ruta a partir del boletín de IBM, las descripciones de las CVE y el código fuente v1.12.8, no a partir de un exploit publicado.

  1. El atacante envía GET /api/v1/auto_login a una instancia alcanzable que aún mantiene la configuración por defecto. La respuesta fija las cookies de token de acceso, de refresco y de clave API del superusuario por defecto.
  2. Con esa sesión, el atacante se conecta al endpoint MCP /api/v1/agentic/mcp por su transporte Streamable HTTP y enumera las herramientas expuestas: creación de flujos, ejecución de flujos y, si está habilitado, el asistente.
  3. El atacante crea un flujo que contiene un componente personalizado, que es código Python, y lo ejecuta. Langflow ejecuta el código del componente en el servidor como proceso Langflow, lo que es ejecución arbitraria de comandos.
  4. En una instancia donde el acceso sin autenticar no es posible, CVE-2026-110193 ofrece la variante con pocos privilegios: un usuario autenticado pide al Asistente Agéntico que genere o envíe código de componentes, usando patrones que el análisis de código del asistente no bloqueaba antes de 1.13.0, llegando a la ejecución de comandos del sistema operativo.

El conjunto de correcciones 1.13.0 para el asistente, que bloquea los imports de pydoc y el atributo ctypeslib de NumPy, incluidos alias e imports con comodín, nombra dos de los patrones que no se bloqueaban.

¿Cómo fluye el ataque?

En una frase: una petición anónima recoge una sesión de superusuario del endpoint de auto-login, y esa sesión conduce el kit MCP hasta que el Python de un componente personalizado se ejecuta en el servidor.

flowchart LR A["GET anónimo a
/api/v1/auto_login"] --> B{"¿AUTO_LOGIN activado?
(valor por defecto)"} B -->|sí| C["Cookies de sesión de
superusuario devueltas"] B -->|no| D["403: cadena bloqueada
aquí"] C --> E["Endpoint MCP
/api/v1/agentic/mcp"] E --> F["Enumerar herramientas de
creación y ejecución de flujos"] F --> G["Crear flujo con un
componente personalizado"] G --> H["Ejecutar: el Python del
componente corre en el servidor"]

¿Qué puede hacer un atacante?

Con la cadena sin autenticar, el atacante opera como el superusuario de Langflow en una instancia expuesta:

  • Ejecutar código arbitrario en el servidor mediante componentes personalizados, con los permisos del proceso Langflow. Los vectores CVSS de IBM para ambas CVE 9.8 puntúan alta la confidencialidad, la integridad y la disponibilidad.
  • Leer y modificar todos los flujos, y con ellos las credenciales almacenadas en los componentes de flujo y las conexiones con proveedores de modelos y API.
  • Usar la posición de superusuario para todo lo demás que el producto permite, incluida la creación de cuentas y claves API.

Las condiciones: la instancia debe ser alcanzable por el atacante y el inicio de sesión automático debe estar activado, que es el valor por defecto de la versión hasta 1.12.8. El paso de ejecución de código no necesita condición adicional, porque los componentes personalizados son una función normal de Langflow que un superusuario siempre puede crear.

Aparte, CVE-2026-110193 da a una cuenta autenticada con pocos privilegios la ejecución de comandos del sistema operativo mediante el Asistente Agéntico, y CVE-2026-110192 permite a un atacante autenticado obtener información sensible por credenciales insuficientemente protegidas. IBM las puntúa 8.8 y 6.5.

¿Por qué funciona la corrección?

La corrección elimina la fuente de sesión anónima cambiando el valor por defecto de la versión. En v1.13.0, src/lfx/src/lfx/services/settings/auth.py dice:

     AUTO_LOGIN: bool = Field(
-        default=True,  # TODO: Set to False in v2.0
+        default=False,  # TODO: Set the development default to False in v2.0.
         description=(
-            "Set to False in production. This will default to False in v2.0."
+            "Enabled by default on development branches; official release packages and tags default to False. "
+            "Set LANGFLOW_AUTO_LOGIN=false to require authentication. "
         ),
     )

El cambio se fusionó como parte de la preparación de la versión 1.13.0, de modo que las ruedas oficiales, los archivos fuente etiquetados y las imágenes de contenedor se distribuyen con el inicio de sesión automático desactivado y exigen una contraseña de superusuario configurada. Con el indicador apagado, /api/v1/auto_login devuelve 403 y las rutas con clave API ya exigían una clave desde la v1.5, así que la cadena sin autenticar de este artículo no tiene punto de entrada. Correcciones complementarias de la misma versión cierran las rutas de las demás CVE:

  • El análisis de código del asistente bloquea los patrones de reexportación de pydoc y ctypeslib.
  • El cliente de bucle local del MCP agéntico ya no hereda el LANGFLOW_API_KEY inyectado por el operador desde el proceso del servidor, ni ejecuta herramientas bajo la identidad de otro usuario.
  • La emisión de claves API consulta la política de inicio de sesión del despliegue en cada punto de emisión.

La corrección acota en lugar de eliminar: el inicio de sesión automático sigue existiendo, y un operador que fije explícitamente LANGFLOW_AUTO_LOGIN=true tras actualizar reabre el endpoint de sesión sin autenticar en su instancia.

¿Cómo compruebo si estuve comprometido?

IBM no ha publicado indicadores para estas CVE, y una toma de control exitosa deja los rastros ordinarios de un uso normal del superusuario, lo que convierte la revisión de registros en la comprobación principal.

  • Busque en los registros de acceso las peticiones al endpoint. En una instancia afectada la ruta aparece como GET /api/v1/auto_login; sus propias peticiones de comprobación también aparecerán, así que compare direcciones de origen y horas.
grep "GET /api/v1/auto_login" /var/log/nginx/access.log | grep -v "127.0.0.1"
  • Revise los flujos creados o modificados durante cualquier ventana en que la instancia estuviera expuesta y sin parchear, en especial los flujos con componentes personalizados que no pueda atribuir a un miembro del equipo.
  • Compruebe en la base de datos las cuentas, claves API o registros de clientes creados en el mismo período.
  • Un intento fallido, en una instancia con el inicio de sesión automático desactivado, deja solo las respuestas 403 en el registro de acceso.

Si su instancia estuvo expuesta a internet en una versión anterior a 1.13.0 con la configuración por defecto, considere debida una revisión pase lo que digan los registros, porque la ruta de toma de control necesita una sola petición.

Cronología

  • 2025-04-07: GitHub publica el aviso de CVE-2025-3248, inyección de código sin autenticar mediante /api/v1/validate/code en Langflow antes de 1.3.0, la falla de autenticación faltante que la cadena de este artículo hace eco.
  • 2025-05-05: CISA añade CVE-2025-3248 a su catálogo de vulnerabilidades explotadas, registrando uso conocido en campañas de ransomware.
  • 2026-03-17: GitHub publica CVE-2026-33017, ejecución remota de código sin autenticar en Langflow mediante el endpoint público de construcción de flujos, corregida en 1.9.0.
  • 2026-09-29: El repositorio de Langflow fusiona el cambio de preparación de versión que fija AUTO_LOGIN en false por defecto en los artefactos oficiales.
  • 2026-10-22: Se publica Langflow 1.13.0, con el cambio de valor por defecto y las correcciones complementarias.
  • 2026-10-28: IBM publica su boletín de seguridad para Langflow OSS 1.0.0 a 1.12.8, nombrando la versión corregida 1.13.0 y sin soluciones alternativas.
  • 2026-10-29: IBM actualiza el boletín con la remediación aclarada, y se publican los registros CVE de CVE-2026-93680, CVE-2026-110186, CVE-2026-110193 y CVE-2026-110192.

Cronología de las fallas de acceso sin autenticar de Langflow de abril de 2025 a octubre de 2026: CVE-2025-3248, CVE-2026-33017, y las cuatro CVE corregidas en 1.13.0.
Figura 1: La tercera divulgación de acceso sin autenticar o RCE en Langflow en 18 meses, tras CVE-2025-3248 (explotada, ligada a ransomware) y CVE-2026-33017. Fuente: avisos de GitHub, catálogo KEV de CISA y boletín de IBM, consultado el 30 de octubre de 2026.

Preguntas frecuentes

¿Está segura mi instancia si solo está en una red interna?

No, salvo que todos los equipos de esa red sean de plena confianza. Los vectores CVSS de IBM dan un vector de ataque de red (AV:N): el atacante solo necesita una ruta al puerto HTTP, no exposición a internet. Cualquier contenedor, portátil o proceso que alcance el puerto puede recoger la sesión de superusuario con una sola petición.

¿El endpoint MCP es en sí mismo de acceso sin autenticar?

No. Las rutas bajo /api/v1/agentic/mcp autentican al llamador con un token de sesión o una clave API. La parte sin autenticar de la cadena es el endpoint de auto-login, que satisface ese requisito sin credenciales. Por eso la corrección elimina la fuente de sesión anónima en lugar de cambiar el transporte MCP.

¿Alguien ha explotado estas fallas?

No se ha reportado explotación de ninguna de las CVE de octubre de 2026, y ninguna figura en el catálogo de vulnerabilidades explotadas de CISA al 30 de octubre de 2026. La predecesora de 2025, CVE-2025-3248, fue explotada en la naturaleza, está en el catálogo y lleva el marcador de uso conocido en campañas de ransomware del catálogo: la razón histórica para tratar la exposición de este producto como urgente y no como teórica.

¿Qué pasa con las vulnerabilidades de Hono del mismo boletín?

El boletín también incorpora tres correcciones de dependencias en Hono, el framework web que Langflow incluye, todas corregidas en Hono 4.13.5: un problema de envenenamiento de caché por fragmento de consulta, una denegación de servicio en el análisis opcional de cuerpos con notación de puntos, y un path traversal en la generación de sitios estáticos. Llegan con la actualización a 1.13.0; no hace falta ninguna acción aparte de actualizar.

Actualicé a 1.13.0; ¿he terminado?

Solo si no reactivó el inicio de sesión automático. La actualización pone el valor por defecto en desactivado y los pasos de configuración lo guían hacia una contraseña real de superusuario. Si su despliegue fija explícitamente LANGFLOW_AUTO_LOGIN=true para mantener el comportamiento antiguo, el endpoint de sesión sin autenticar regresa y sigue expuesto hasta que apague de nuevo el indicador.

¿Por qué la corrección anterior no cerró esto?

La remediación anterior, referenciada en el código fuente como GHSA-fjgc-vj2f-77hm, cambió lo que emite /api/v1/auto_login: un token de superusuario de 365 días pasó a ser un token de acceso de corta duración con un token de refresco. Limitaba la vida útil del token que recibe un llamador anónimo, pero recibirlo era la vulnerabilidad, y el endpoint siguió emitiendo sesiones hasta que 1.13.0 cambió el valor por defecto.

Encuentre la versión de Langflow que ejecuta con Ostorlab

Los análisis de dependencias de Ostorlab construyen el inventario completo de los paquetes Python que sus servicios e imágenes de contenedor instalan, para que pueda localizar cada despliegue con Langflow 1.0.0 a 1.12.8 y confirmar la actualización a 1.13.0 en todo lo que importa. Ejecute un análisis con Ostorlab para obtener las versiones antes de que crezca la ventana de exposición.

Referencias

  • Boletín de seguridad de IBM, «Security Bulletin: Langflow OSS is affected by multiple vulnerabilities», publicado el 28 de octubre de 2026 y actualizado el 29 de octubre de 2026, con el rango afectado, las cuatro CVE, los vectores CVSS, la remediación 1.13.0 y la ausencia de soluciones alternativas: https://www.ibm.com/support/pages/node/7294467 (consultado el 30 de octubre de 2026)
  • Registro CVE-2026-93680, entrada del CNA de IBM, publicada el 29 de octubre de 2026, CVSS v3.1 9.8, CWE-287: https://www.cve.org/cverecord?id=CVE-2026-93680 (consultado el 30 de octubre de 2026)
  • Registro CVE-2026-110186, publicado el 29 de octubre de 2026, CVSS v3.1 9.8, CWE-94: https://www.cve.org/cverecord?id=CVE-2026-110186 (consultado el 30 de octubre de 2026)
  • Registro CVE-2026-110193, publicado el 29 de octubre de 2026, CVSS v3.1 8.8, CWE-94: https://www.cve.org/cverecord?id=CVE-2026-110193 (consultado el 30 de octubre de 2026)
  • Notas de la versión Langflow 1.13.0, publicadas el 22 de octubre de 2026, que enumeran el cambio de valor por defecto del inicio de sesión automático y las correcciones de seguridad complementarias: https://github.com/langflow-ai/langflow/releases/tag/v1.13.0 (consultado el 30 de octubre de 2026)
  • La solicitud de extracción que desactiva el inicio de sesión automático por defecto en los artefactos de versión, fusionada el 29 de septiembre de 2026: https://github.com/langflow-ai/langflow/pull/14993 (consultado el 30 de octubre de 2026)
  • Código fuente de Langflow v1.12.8: el valor por defecto de AUTO_LOGIN en src/lfx/src/lfx/services/settings/auth.py, la ruta /auto_login en src/backend/base/langflow/api/v1/login.py, y create_user_longterm_token con el comentario de la corrección anterior en src/backend/base/langflow/services/auth/service.py, leídos en la etiqueta v1.12.8: https://github.com/langflow-ai/langflow/tree/v1.12.8 (consultado el 30 de octubre de 2026)
  • Código fuente de Langflow v1.13.0, que muestra el valor por defecto invertido: https://github.com/langflow-ai/langflow/blob/v1.13.0/src/lfx/src/lfx/services/settings/auth.py (consultado el 30 de octubre de 2026)
  • La ruta MCP agéntica y su autenticación, src/backend/base/langflow/api/v1/agentic_mcp.py en v1.12.8: https://github.com/langflow-ai/langflow/blob/v1.12.8/src/backend/base/langflow/api/v1/agentic_mcp.py (consultado el 30 de octubre de 2026)
  • Aviso de GitHub para CVE-2025-3248, la falla anterior de autenticación faltante de Langflow, publicado el 7 de abril de 2025, corregida en 1.3.0: https://github.com/advisories/GHSA-c995-4fw3-j39m (consultado el 30 de octubre de 2026)
  • Aviso de GitHub para CVE-2026-33017, RCE sin autenticar mediante el endpoint público de construcción de flujos, publicado el 17 de marzo de 2026, corregida en 1.9.0: https://github.com/advisories/GHSA-vwmf-pq79-vjvx (consultado el 30 de octubre de 2026)
  • Catálogo de vulnerabilidades explotadas de CISA, donde CVE-2025-3248 se añadió el 5 de mayo de 2025 con uso conocido en campañas de ransomware, y donde ninguna de las CVE de Langflow de octubre de 2026 figura al 30 de octubre de 2026: https://www.cisa.gov/known-exploited-vulnerabilities-catalog (consultado el 30 de octubre de 2026)
  • Repositorio de Langflow, 156,160 estrellas al 30 de octubre de 2026, para la escala del proyecto: https://github.com/langflow-ai/langflow (consultado el 30 de octubre de 2026)
  • Repositorio de Langflow en Docker Hub, 4,482,343 descargas al 30 de octubre de 2026: https://hub.docker.com/r/langflowai/langflow (consultado el 30 de octubre de 2026)
  • Estadísticas de descarga de PyPI para langflow, 37,742 descargas en los 30 días previos al 30 de octubre de 2026: https://pypistats.org/packages/langflow (consultado el 30 de octubre de 2026)