
# توثيق تقني وإثبات مفهوم لـ CVE-2023-46474، ثغرة تنفيذ التعليمات البرمجية عن بُعد في PMB <=7.5.3 عبر رفع ملفات غير مقيد، بما في ذلك خطوات إعادة الإنتاج وإرشادات المعالجة.
CVE-2023-46474
| CVSS v3.1 Vector | CVSS v3.1 Score |
|---|---|
| AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H | 9.1 |
اكتُشفت في إطار اختبار اختراق بواسطة Marcus Reynaud من Devensys Cybersecurity
البرنامج النصي pmb/admin/convert/start_import.php معرّض لثغرة من نوع Unrestricted File Upload، مما يسمح بالحصول على تنفيذ تعليمات برمجية عشوائية على الخادم.

يجب على المهاجم أولاً الحصول على الوصول الإداري إلى المنصة لاستخدام هذه الوظيفة.
لا يتحقق البرنامج النصي PHP من امتداد الملف الذي يرفعه المستخدم، ويخزّنه في دليل يمكن لخادم الويب الوصول إليه مع الحفاظ على امتداده. وبالتالي، من الممكن رفع برنامج نصي PHP ثم تنفيذه بزيارة المكان الذي تم رفعه إليه.
من الممكن إعادة إنتاج هذا السلوك بالطريقة التالية:
نرسل ملفًا بامتداد .php يحتوي على الكود الذي نريد تنفيذه على النظام. هنا، سننفّذ أمر النظام id.

من خلال ملاحظة الاستجابة، يمكننا استرجاع اسم الملف كما تمت كتابته على الخادم.

لتنفيذ الكود الخاص بنا، يكفي زيارة /pmb/temp/[nom_du_fichier].php باستخدام متصفح.

يتم إرجاع نتيجة الأمر من قبل الخادم.
سبب هذه الثغرة هو عدم وجود تحكم في الملف قبل كتابته على القرص:

لمعالجة هذه الثغرة، يجب تنفيذ تحكم في الامتدادات على الملفات التي يرفعها المستخدمون.
ننصحك باستخدام نظام قائمة بيضاء (whitelist)، يسمح فقط ببعض امتدادات الملفات.
يمكنك أيضًا كتابة الملف على القرص مع حذف الامتداد (علماً أنه تخزين مؤقت).
من الممكن أيضًا كتابة الملف في دليل خارج نطاق خادم الويب، مما يجعل الملف غير قابل للوصول عبر الإنترنت، وبالتالي لا يمكن تنفيذ الكود.
الإصدارات 7.5.4 وما فوق غير معرّضة للثغرة، حيث تمت إعادة كتابة البرنامج النصي بالكامل.