
MDJM Event Management <= 1.7.8.3 - Произвольная загрузка файла аутентифицированным пользователем (Администратор+) через параметр 'mdjm_email_upload_file'
Плагин WordPress 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() в функционале коммуникаций. Функция загрузки не выполняет надлежащей проверки файлов при обработке вложений для email-коммуникаций. Это позволяет аутентифицированным пользователям с правом mdjm_comms_send (по умолчанию администраторам и MDJM-администраторам) загружать произвольные файлы, включая PHP-файлы, которые могут быть выполнены на сервере.
Источник: Пользовательский ввод из $_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.Файл: includes/admin/communications/comms-functions.php#L241-L251
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;
}
}
$_FILES['mdjm_email_upload_file'] обрабатываются напрямую без проверки в comms-functions.php#L241-L251./wp-content/uploads/YYYY/MM/) с помощью move_uploaded_file() без каких-либо проверок безопасности.