
Laboratorio riproducibile per CVE-2026-33017, una RCE non autenticata in Langflow. Include un servizio vulnerabile containerizzato con Docker e un PoC a impatto minimo che dimostra l'esecuzione di codice tramite l'endpoint pubblico di build.
CVE-2026-33017 è una vulnerabilità di Esecuzione Remota di Codice (RCE) non autenticata in Langflow in cui un endpoint di build pubblico accetta dati di flusso controllati dall'attaccante, consentendo l'esecuzione di codice di componenti personalizzati sul server.
In questo laboratorio, il flusso di validazione è:
PUBLICjob_idLa prova viene recuperata direttamente tramite il meccanismo degli eventi dell'API Langflow, rendendo il risultato osservabile attraverso l'interfaccia di sistema stessa.
Questo documento presenta un laboratorio solo-vulnerabilità.
Attualmente, docker compose contiene un solo servizio: vuln, perché questo progetto segue un approccio solo-artefatti-reali ed evita ambienti patchati che non si basano su un artefatto ufficiale corretto.
Il seguente comportamento è stato verificato in questo laboratorio:
http://localhost:78611.8.1build_public_tmp restituisce un job_idEsempio di oggetto di prova:
{
"canary": "lf33017-c14fc1c9",
"id_output": "uid=1000(user) gid=0(root) groups=0(root)",
"whoami": "user",
"hostname": "155aa3fd5e2a",
"cwd": "/app",
"python_version": "3.12.12"
}
Le prove chiave sono:
id_outputwhoamihostnamecwdpython_versionLe informazioni sopra mostrano che il codice controllato dall'attaccante è stato effettivamente eseguito lato server.
.
├── docker-compose.yml
├── vuln/
│ └── Dockerfile
├── poc/
│ └── poc.py
├── README.md
└── .gitignore
7861 -> 7860Questa vulnerabilità esiste perché l'endpoint di build pubblico di Langflow accetta definizioni di flusso fornite dall'utente, anche se l'endpoint è già progettato per flussi pubblici. Quando un attaccante invia una definizione di nodo contenente codice di componente personalizzato, il sistema passa quel codice nel percorso di build del flusso, che alla fine porta all'esecuzione di codice sul server.
Il PoC in questo progetto utilizza un componente personalizzato che restituisce un oggetto di prova nel suo output per dimostrare che il codice controllato dall'attaccante viene effettivamente eseguito.
Il PoC in questo progetto è progettato per essere a minimo danno e si concentra su una prova chiaramente osservabile tramite l'API. Il suo flusso di lavoro è il seguente:
PUBLICjob_idQuesto PoC non copre:
docker compose up -d --build
curl -i http://localhost:7861/api/v1/version
python3 poc/poc.py --base-url http://localhost:7861 --artifact-dir ./artifacts/vuln
Quando il PoC ha successo, l'output apparirà così:
[+] http://localhost:7861 pronto (version=1.8.1)
=== TARGET: vuln ===
Base URL : http://localhost:7861
Version : 1.8.1
Flow ID : <uuid>
HTTP : 200
Job ID : <uuid>
Canary : lf33017-xxxxxxxx
Events : artifacts/vuln/events-<job_id>.ndjson
Polls : 2
[+] Prova osservata tramite l'endpoint degli eventi dell'API Langflow:
{
"canary": "lf33017-xxxxxxxx",
"id_output": "uid=1000(user) gid=0(root) groups=0(root)",
"whoami": "user",
"hostname": "<container-hostname>",
"cwd": "/app",
"python_version": "3.12.x"
}
[+] Comportamento vulnerabile osservato
Il file artifacts/vuln/events-<job_id>.ndjson memorizza i dati grezzi degli eventi per ulteriori debug.
Questo PoC dimostra che:
Questo PoC non è inteso a dimostrare persistenza o post-sfruttamento avanzato e mantiene l'impatto al livello minimo necessario per validare la vulnerabilità.
Sulla base di questo laboratorio, l'impatto dimostrato è:
Questo repository non include un servizio patchato per scelta progettuale.
Il suo ambito è limitato alla riproduzione del comportamento vulnerabile su un artefatto upstream reale. Un lato patchato viene aggiunto solo quando è disponibile un artefatto ufficiale corretto chiaramente verificabile dal fornitore o dal progetto upstream.
Per questo motivo, questo repository evita deliberatamente:
Questo mantiene il laboratorio con un ambito ristretto e tecnicamente onesto. Piuttosto che presentare una configurazione affiancata artificiale, il repository si concentra su tre cose:
In pratica, questo rende il repository particolarmente adatto per:
docker compose down -v
Questo laboratorio è progettato per test su localhost esclusivamente.
Requisiti di utilizzo: