Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-38360 — Sicherheitshinweis: CVE-2026-38360 Pfad-Traversal (CWE-22) in dash-uploader (Python/PyPI) | Kitploit
Tools/GitHubGitHub/a1ohadance/cve-2026-38360
SchwachstellenanalyseCode-AnalyseExploitationWebsicherheitPenetrationstestsLernen & Bildung
GitHuba1ohadance/cve-2026-38360

CVE-2026-38360

Sicherheitshinweis: CVE-2026-38360 Pfad-Traversal (CWE-22) in dash-uploader (Python/PyPI)

Repository anzeigen
23vor 4 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

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

CVE NVD CWE Severity Patch Auth Version PyPI Downloads

Total Downloads
License

Unauthentifizierte Path-Traversal-Schwachstelle in fohrloop/dash-uploader (Python, PyPI), die das Schreiben beliebiger Dateien ermöglicht und unter anderem zu Remote Code Execution (RCE), Überschreiben von Anwendungsquellcode, gespeichertem XSS und der Installation persistenter Backdoors führt.

⚠️ Kein Patch verfügbar, und es wird niemals einen geben

Das Repository wurde am 2025-07-19 archiviert und hat keinen aktiven Maintainer. Jede veröffentlichte Version (0.1.0 bis 0.7.0a2) ist betroffen und wird es bleiben. Das Paket verzeichnet weiterhin etwa 28.000 monatliche Downloads.

Jeder, der dash-uploader in Produktion betreibt, muss selbst eine Gegenmaßnahme umsetzen. Die empfohlene Lösung ist die Migration auf die in Plotly Dash integrierte Komponente dcc.Upload. Alle Optionen finden Sie unter Mitigation.

CVE-IDCVE-2026-38360 (NVD)
SchwachstellePath Traversal (CWE-22)
CVSS 3.19.8 / Kritisch (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
Produktdash-uploader
Betroffene Versionen0.1.0 bis 0.7.0a2 (alle 18 Releases)
Behobene Versionkeine (Projekt am 2025-07-19 archiviert)
AngriffsvektorRemote, ohne Authentifizierung
EntdeckerMuhammad Fitri Bin Mohd Sultan
Vergeben vonMITRE, 2026-05-07
Verwandte CVEsCVE-2026-38361 (DoS in derselben Bibliothek)

Beschreibung

Drei benutzerkontrollierte Parameter aus request.form.get() in dash_uploader/httprequesthandler.py werden ohne Bereinigung oder Validierung direkt an os.path.join() und os.makedirs() übergeben:

  1. upload_id (Zeile 57 → Zeile 161, BaseHttpRequestHandler.get_temp_root): steuert das Zielverzeichnis. Ein Angreifer kann upload_id=../../../../usr/local/lib/python3.10/site-packages senden; die Dateien werden dann in das Paketverzeichnis von Python geschrieben.

  2. resumableFilename (Zeile 51 → Zeile 108, BaseHttpRequestHandler._post): steuert den endgültigen Dateinamen. Ein Angreifer kann selbst mit einer legitimen upload_id über den Dateinamen aus dem Upload-Verzeichnis ausbrechen.

  3. resumableIdentifier (Zeile 54 → Zeile 64, BaseHttpRequestHandler._post): wird zusammen mit os.makedirs() verwendet, um das temporäre Verzeichnis zu erstellen. Ein Angreifer kann an beliebiger Stelle im Dateisystem beliebige Verzeichnisse anlegen.

Der Upload-Endpunkt (standardmäßig /API/dash-uploader) erfordert keine Authentifizierung. Der in v0.5.0 hinzugefügte Hook http_request_handler ermöglicht Vorabprüfungen über post_before(), aber die verwundbare Methode _post() liest alle Parameter direkt aus request.form, nachdem der Hook zurückgekehrt ist. Der Hook kann Parameter nicht bereinigen, bevor die Bibliothek sie verarbeitet. Ein Entwickler, der über den Hook eine Authentifizierung hinzufügt, bleibt gegenüber Path Traversal durch einen authentifizierten Benutzer verwundbar.

Verwundbarer Code

root@kitploit:~
# 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

Drei unabhängige Traversal-Senken haben dieselbe Grundursache: Formularwerte erreichen os.path.join und os.makedirs ohne Validierung.

Attack vectors

Ein nicht authentifizierter Remote-Angreifer sendet eine HTTP-POST-Multipart-Anfrage an den Upload-Endpunkt. Durch das Injizieren von Path-Traversal-Sequenzen (../) in den Formularparameter upload_id kontrolliert der Angreifer das Zielverzeichnis für die hochgeladene Datei. Beispielsweise schreibt upload_id=../../../../usr/local/lib/python3.10/site-packages Dateien in das Paketverzeichnis von Python und ermöglicht so beim nächsten Interpreterstart RCE durch die automatische Ausführung von .pth-Dateien.

Es sind keine Authentifizierung, kein Sitzungstoken und kein CSRF-Token erforderlich. Zwei weitere Parameter (resumableFilename und resumableIdentifier) bieten unabhängige Traversal-Vektoren über denselben Endpunkt. Die Standardkonfiguration der Bibliothek, wie sie in der offiziellen Quickstart-Dokumentation gezeigt wird, ist mit einem einzigen curl-Befehl ausnutzbar.

Auswirkungen

Beliebiges Schreiben von Dateien in jedes Verzeichnis, das für den Serverprozess beschreibbar ist. Dies führt über mehrere bekannte Primitive zu Remote Code Execution (RCE):

RCE-Primitive

  • Ablegen einer Python-.pth-Datei in site-packages. Führt beim nächsten Interpreterstart vom Angreifer bereitgestellten Code aus.
  • Injektion von sitecustomize.py oder usercustomize.py. Wird bei jedem Python-Start ausgeführt.
  • Überschreiben eines importierbaren Python-Moduls im Paketverzeichnis der Anwendung. Wird beim nächsten Import oder Worker-Recycle ausgeführt.
  • Überschreiben des WSGI/ASGI-Einstiegspunkts (z. B. app.wsgi, wsgi.py). Wird beim nächsten Worker-Reload ausgeführt.
  • Cron-Drop-in (/etc/cron.d/, /etc/cron.hourly/, User-Crontab-Spool), wenn der Prozess die erforderlichen Privilegien besitzt. Zeitgesteuerte Ausführung.
  • Systemd-Unit- oder User-Unit-Drop-in (/etc/systemd/system/, ~/.config/systemd/user/). Wird beim nächsten Dienststart oder Neustart ausgeführt.
  • Injektion in /etc/ld.so.preload, wenn der Prozess als Root läuft. Lädt Angreifercode in jede nachfolgende Ausführung von Binärdateien vor.
  • Überschreiben von Shell-Startdateien (~/.bashrc, ~/.profile, ~/.bash_profile). Wird beim nächsten interaktiven Login des Anwendungsbenutzers ausgeführt.
  • Anhängen an ~/.ssh/authorized_keys. Gewährt persistenten SSH-Zugriff auf den Host als Anwendungsbenutzer.

Auswirkungen auf die Web-Ebene

  • Gespeichertes Cross-Site-Scripting auf der Host-Domain durch Überschreiben ausgelieferter JavaScript-Dateien (z. B. Dash-Framework-JS in site-packages), das jeden Benutzer bei jedem Seitenaufruf betrifft, bis die Anwendung neu gestartet wird
  • Überschreiben von Anwendungsquellcode (eine stille, persistente Hintertür, die normale Deployments übersteht, wenn der Deploy-Mechanismus die betroffenen Pfade nicht vollständig überschreibt)

Auswirkungen auf das Dateisystem

  • Beliebige Verzeichniserstellung an jeder Stelle, die der Prozess erreichen kann, über os.makedirs() mit dem nicht bereinigten Parameter resumableIdentifier (nutzbar zur Inode-Erschöpfung oder zum Vorbereiten von Schreibvorgängen in nicht vorhandene Verzeichnisbäume)
  • Benutzerübergreifendes Ersetzen von Dateien in gemeinsamen Upload-Verzeichnissen, was zu Datenvergiftung zwischen Mandanten derselben Anwendung führt

Betroffene Komponente

  • dash_uploader/httprequesthandler.py
  • BaseHttpRequestHandler.get_temp_root()
  • BaseHttpRequestHandler._post()

Mitigation

⚠️ Kein Patch verfügbar, und das Projekt ist archiviert

Optionen für Benutzer, die die Bibliothek derzeit im Einsatz haben, in der Reihenfolge der Präferenz:

  1. Migrieren Sie zu dcc.Upload, der offiziellen Upload-Komponente, die mit Plotly Dash ausgeliefert wird. Dateien treffen im Callback als base64-String ein; es wird kein Handler offengelegt, der in das Dateisystem schreibt, und es existiert kein clientkontrollierter Zielpfad, daher ist diese Fehlerklasse hier nicht anwendbar. Am besten geeignet für kleine und mittlere Dateien. Für sehr große Uploads siehe Punkt 2.

  2. Schreiben Sie einen schlanken Flask-Upload-Handler mit werkzeug.utils.secure_filename() und einem fest codierten serverseitigen Zielverzeichnis. Akzeptieren Sie niemals vom Client gelieferte Werte für upload_id, Dateinamen oder Identifier als Pfadkomponenten.

  3. Falls Sie dash-uploader weiterhin verwenden, platzieren Sie den Upload-Endpunkt hinter einer Authentifizierung UND validieren Sie upload_id, resumableFilename und resumableIdentifier anhand einer strengen Allowlist (z. B. nur UUIDs) auf einer Ebene, die die Anfrage umschreibt oder ablehnt, bevor der Handler der Bibliothek sie sieht. Der Hook http_request_handler der Bibliothek verhindert das Traversal NICHT, da die Parameter aus request.form gelesen werden, nachdem der Hook zurückgekehrt ist; die Bereinigung muss oberhalb der Bibliothek erfolgen.

  4. Auf der Reverse-Proxy- oder WAF-Ebene lehnen Sie jede Anfrage an den Upload-Endpunkt ab, bei der ein Formularfeld .., codierte Varianten (%2e%2e, ..%2f, %2e%2e%2f) oder absolute Pfade enthält.

Offenlegungszeitplan

DatumEreignis
2026-03-17Schwachstelle während der Sicherheitsforschung auf einer Produktionsinstallation entdeckt.
2026-03-19CVE-Anfrage bei MITRE eingereicht.
2026-05-07CVE-2026-38360 von MITRE vergeben.
2026-05-07Öffentliche Sicherheitswarnung veröffentlicht.
2026-05-09CVE-Eintrag in der MITRE-CVE-Datenbank und der NVD veröffentlicht.

Paketkontext

  • Ungefähr 28.000 monatliche Downloads auf PyPI (27.756 in den 30 Tagen vor 2026-05-07, mit anhaltendem täglichem Volumen trotz Archivierung des Repositorys). Quelle: pypistats.org.
  • Neueste veröffentlichte Version: 0.6.1 (stabile Linie). Vorabversionen reichen bis 0.7.0a2.
  • Erforderliche Abhängigkeit: dash. Optionale Abhängigkeit: pyyaml. Lizenz: MIT.
  • 11 abhängige Pakete, 6 abhängige Repositorys.
  • 153 GitHub-Sterne.
  • Repository am 2025-07-19 archiviert (Issue #153).
  • Keine früheren CVEs (verifiziert gegen NVD, GitHub Advisory Database, Snyk, OSV am 2026-03-19).

Referenzen

  • https://www.cve.org/CVERecord?id=CVE-2026-38360
  • https://nvd.nist.gov/vuln/detail/CVE-2026-38360
  • https://github.com/fohrloop/dash-uploader
  • https://pypi.org/project/dash-uploader/
  • https://pypistats.org/packages/dash-uploader
  • https://github.com/fohrloop/dash-uploader/blob/stable/dash_uploader/httprequesthandler.py
  • https://github.com/fohrloop/dash-uploader/blob/dev/dash_uploader/httprequesthandler.py
  • https://github.com/fohrloop/dash-uploader/issues/153
  • https://cwe.mitre.org/data/definitions/22.html

Entdecker

Muhammad Fitri Bin Mohd Sultan

Tool herunterladen