
Prueba de concepto para CVE-2026-9198 - RCE no autenticado en IBM Langflow mediante bypass de auto-login
Este repositorio proporciona una prueba de concepto educativa para CVE-2026-9198 que afecta a IBM Langflow OSS.
El PoC (poc.py) demuestra cómo un atacante no autenticado puede encadenar:
GET/POST /api/v1/auto_login (devuelve un token de superusuario cuando el auto-login está habilitado), yPOST /api/v1/validate/code (ejecuta código Python controlado por el atacante)para lograr la ejecución remota de código.
Este código y las stacks de Docker proporcionadas son solo para pruebas de seguridad locales y educación.
No lo ejecutes contra sistemas que no sean de tu propiedad o para los que no tengas permiso explícito de prueba.
.
├── poc.py
├── vulnerable/docker-compose.yaml
└── patched/docker-compose.yaml
poc.py: PoC del exploit.vulnerable/docker-compose.yaml: stack de laboratorio que usa langflowai/langflow:1.10.0 (vulnerable).patched/docker-compose.yaml: stack de laboratorio que usa langflowai/langflow:1.10.1 (objetivo de comportamiento parcheado).Ambos archivos compose están configurados intencionalmente como laboratorios para probar poc.py en http://127.0.0.1:9999.
pip install requests
Inicia el entorno vulnerable:
docker compose -f vulnerable/docker-compose.yaml up -d
Ejecuta el PoC:
python3 poc.py
El resultado esperado en la versión vulnerable incluye una línea roja [!] y una salida de comando similar a:
[!] /api/v1/auto_login is vulnerable: uid=... gid=...
Detén primero la stack vulnerable (si está en ejecución):
docker compose -f vulnerable/docker-compose.yaml down -v
Inicia el entorno parcheado:
docker compose -f patched/docker-compose.yaml up -d
Ejecuta el mismo PoC:
python3 poc.py
El resultado esperado en la versión parcheada es una línea verde [-] que indica que la cadena de explotación ya no tiene éxito.
En poc.py:
URL por defecto es http://127.0.0.1:9999CMD por defecto es idAjusta estas constantes si necesitas probar un objetivo local o un comando diferente.