Skip to content
KitploitKITPLOIT
OutilsBlog
Log in
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-38360 — Advisory : CVE-2026-38360 traversée de chemin (CWE-22) dans dash-uploader (Python/PyPI) | Kitploit
Outils/GitHubGitHub/a1ohadance/cve-2026-38360
Analyse des VulnérabilitésAnalyse de CodeExploitationSécurité WebTests d'IntrusionApprentissage et Éducation
GitHuba1ohadance/cve-2026-38360

CVE-2026-38360

Advisory : CVE-2026-38360 traversée de chemin (CWE-22) dans dash-uploader (Python/PyPI)

Voir le dépôt
210il y a 4 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-38360: Path Traversal dans dash-uploader

CVE NVD CWE Severity Patch Auth Version PyPI Downloads Total Downloads License

Traversée de chemin non authentifiée dans fohrloop/dash-uploader (Python, PyPI) permettant l'écriture arbitraire de fichiers, conduisant à (sans s'y limiter) l'exécution de code à distance (RCE), l'écrasement du code source de l'application, le XSS stocké et l'installation de portes dérobées persistantes.

⚠️ Aucun correctif n'est disponible et aucun ne sera jamais publié

Le dépôt a été archivé le 19 juillet 2025 sans mainteneur actif. Toutes les versions publiées (0.1.0 à 0.7.0a2) sont affectées et le resteront. Le package totalise encore environ 28 000 téléchargements mensuels.

Quiconque exécute dash-uploader en production doit appliquer lui-même une mesure d'atténuation. La correction recommandée est de migrer vers le composant dcc.Upload intégré de Plotly Dash. Voir Atténuation pour toutes les options.

CVE IDCVE-2026-38360 (NVD)
VulnérabilitéPath Traversal (CWE-22)
CVSS 3.19,8 / Critique (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
Produitdash-uploader
Versions affectées0.1.0 à 0.7.0a2 (toutes les 18 versions)
Version corrigéeaucune (projet archivé le 19 juillet 2025)
Vecteur d'attaquedistant, non authentifié
DécouvreurMuhammad Fitri Bin Mohd Sultan
Assigné parMITRE, 7 mai 2026
LiéCVE-2026-38361 (DoS dans la même bibliothèque)

Description

Trois paramètres contrôlés par l'utilisateur provenant de request.form.get() dans dash_uploader/httprequesthandler.py sont passés directement à os.path.join() et os.makedirs() sans aucune désinfection ni validation :

  1. upload_id (ligne 57 → ligne 161, BaseHttpRequestHandler.get_temp_root) : contrôle le répertoire de destination. Un attaquant peut envoyer upload_id=../../../../usr/local/lib/python3.10/site-packages et les fichiers sont écrits dans le répertoire des packages Python.

  2. resumableFilename (ligne 51 → ligne 108, BaseHttpRequestHandler._post) : contrôle le nom de fichier final. Un attaquant peut sortir du répertoire de téléchargement via le nom de fichier même avec un upload_id légitime.

  3. resumableIdentifier (ligne 54 → ligne 64, BaseHttpRequestHandler._post) : utilisé avec os.makedirs() pour créer le répertoire temporaire. Un attaquant peut créer des répertoires arbitraires n'importe où sur le système de fichiers.

Le point de terminaison de téléchargement (/API/dash-uploader par défaut) ne nécessite aucune authentification. Le hook http_request_handler ajouté dans v0.5.0 permet des vérifications pré-requête via post_before(), mais la méthode vulnérable _post() lit tous les paramètres directement depuis request.form après le retour du hook. Le hook ne peut pas nettoyer les paramètres avant que la bibliothèque ne les traite. Un développeur qui ajoute l'authentification via le hook reste vulnérable au path traversal de la part d'un utilisateur authentifié.

Code vulnérable

# dash_uploader/httprequesthandler.py
def _post(self):
    resumableFilename = request.form.get("resumableFilename", default="error", type=str)
    resumableIdentifier = request.form.get("resumableIdentifier", default="error", type=str)
    upload_id = request.form.get("upload_id", default="", type=str)
    ...
    temp_root = self.get_temp_root(upload_id)                          # upload_id flows in here
    temp_dir = os.path.join(temp_root, resumableIdentifier)            # raw user input -> os.path.join
    if not os.path.isdir(temp_dir):
        os.makedirs(temp_dir)                                          # raw user input -> os.makedirs

def get_temp_root(self, upload_id):
    return os.path.join(self.upload_folder, upload_id)                 # no sanitization: ../../ escapes upload_folder

Trois puits d'attaque par traversée indépendants partagent la même cause racine : les valeurs du formulaire atteignent os.path.join et os.makedirs sans validation.

Vecteurs d'attaque

Un attaquant distant non authentifié envoie une requête HTTP POST multipart au point de terminaison de téléchargement. En injectant des séquences de traversée de chemin (../) dans le paramètre de formulaire upload_id, l'attaquant contrôle le répertoire de destination du fichier téléchargé. Par exemple, upload_id=../../../../usr/local/lib/python3.10/site-packages écrit des fichiers dans le répertoire de packages de Python, permettant une RCE au prochain démarrage de l'interpréteur via l'auto-exécution de .pth.

Aucun jeton d'authentification, de session ou CSRF n'est requis. Deux paramètres supplémentaires (resumableFilename et resumableIdentifier) fournissent des vecteurs de traversée indépendants via le même point de terminaison. La configuration par défaut de la bibliothèque, telle que présentée dans la documentation officielle de démarrage rapide, est exploitable avec une seule commande curl.

Impact

Écriture arbitraire de fichiers dans tout répertoire accessible en écriture par le processus serveur. Cela se traduit par l'exécution de code à distance (RCE) via plusieurs primitives bien connues :

Primitives RCE

  • Fichier .pth Python déposé dans site-packages. Exécute le code fourni par l'attaquant au prochain démarrage de l'interpréteur.
  • Injection sitecustomize.py ou usercustomize.py. S'exécute à chaque démarrage de Python.
  • Écrasement d'un module Python importable dans le répertoire de l'application. S'exécute à la prochaine importation ou au recyclage du worker.
  • Écrasement du point d'entrée WSGI/ASGI (par exemple app.wsgi, wsgi.py). S'exécute au prochain rechargement du worker.
  • Dépôt dans cron (/etc/cron.d/, /etc/cron.hourly/, spool crontab utilisateur) lorsque le processus dispose des privilèges nécessaires. Exécution planifiée.
  • Dépôt d'unité systemd ou unité utilisateur (/etc/systemd/system/, ~/.config/systemd/user/). S'exécute au prochain démarrage du service ou au redémarrage.
  • Injection /etc/ld.so.preload lorsque le processus s'exécute en tant que root. Précharge le code de l'attaquant dans chaque exécution binaire ultérieure.
  • Écrasement de fichier de démarrage du shell (~/.bashrc, ~/.profile, ~/.bash_profile). S'exécute à la prochaine connexion interactive de l'utilisateur de l'application.
  • Ajout dans ~/.ssh/authorized_keys. Accorde un accès SSH persistant à l'hôte en tant qu'utilisateur de l'application.

Impact sur la couche web

Télécharger l’outil