
PoC لـ CVE-2026-65650 - حجب الخدمة (DoS) عبر رفع الصورة الرمزية في Elgg
رفض خدمة مصادق عليه في ميزة رفع الصورة الرمزية في Elgg عبر أبعاد صورة غير محدودة، مما يتسبب في استنفاد ذاكرة GD.
< 6.3.5 (سلسلة 6.x)، و7.0.0-rc.1 – < 7.0.0 (إصدارات 7.0 المرشحة)6.3.5، 7.0.0actions/avatar/upload.php يمرر الصور المرفوعة مباشرة إلى saveIconFromUploadedFile() دون أي حماية للأبعاد أو الحجم أو الذاكرة:
$avatar = elgg_get_uploaded_file('avatar', false);
// لا يوجد فحص للأبعاد.
// لا يوجد فحص للحجم.
// لا يوجد فحص للنسبة.
if (!$owner->saveIconFromUploadedFile('avatar')) {
return elgg_error_response(elgg_echo('avatar:resize:fail'));
}
مكتبة GD في PHP تخصص الذاكرة بناءً على أبعاد البكسل المفكوكة للصورة، وليس حجم الملف على القرص. لذلك، ملف صغير بأبعاد متطرفة يجبر على تخصيص ضخم للذاكرة بمجرد أن تتعامل معه GD.
الخطوة 1 — python3 CVE-2026-65650.py
الخطوة 2 — سجّل الدخول كأي مستخدم مسجّل.
الخطوة 3 — انتقل إلى Profile > Edit Avatar وارفَع CVE-2026-65650.png.
تشغيل إثبات المفهوم يجبر GD على تخصيص حوالي 286 ميغابايت لفك ترميز الصورة وحوالي 572 ميغابايت إضافية لتغيير حجمها، على الرغم من أن الملف نفسه يبلغ حوالي 308 كيلوبايت على القرص. على جهاز اختبار بسعة 14 جيجابايت وبدون Swap، أدى رفع واحد إلى خفض الذاكرة المتاحة إلى حوالي 1.3 جيجابايت. في البيئات المحدودة الذاكرة، هذا يكفي لتحفيز قتل OOM للنواة لعمليات PHP-FPM، مما يُسقط الموقع دون أي استرداد ذاتي.
طلب واحد من حساب واحد منخفض الامتيازات كافٍ لدفع هذا الاستهلاك. الطلبات المتكررة أو المتزامنة من حسابات متعددة تضاعف التأثير وتزيد من احتمالية الوصول إلى OOM.
تم الإصلاح في Elgg 7.0.0 وتم ترحيله إلى 6.3.5.