
wp2shell のためのブラックボックス型・非侵入型検出ツール — 2026-07-17 に公開された WordPress コアの事前認証 RCE チェーン:
/wp-json/batch/v1) のルート混乱: wp_parse_url() が失敗するパスのサブリクエストは、検証配列には入るもののハンドラ配列には入らず、両者の同期が崩れます。WP_Query の author__not_in 処理における SQL インジェクション。このルート混乱により事前認証で到達可能です。これらを連鎖させると、匿名の攻撃者が管理者アカウントを偽造し、プラグインのウェブシェルを配置できます — デフォルトインストールの場合、プラグインやテーマは不要です。
完全な技術解説: https://own2pwn.fr/articles/appsec/wp2shell-wordpress-rce
これは曝露を検出します。何も悪用しません。送信されるすべてのリクエストは、クローラーが送信しうる通常の読み取り専用リクエストです。
generator タグを削除した堅牢化済みインストールでも識別できます: generator メタタグ、コアアセットの ?ver= (/wp-includes/ と /wp-admin/ のアセット。これらはコアに追従します)、RSS フィードのジェネレーター (?v=)、/wp-links-opml.php、ログインページのアセット、/wp-includes/version.php、readme.html、/wp-json/ インデックス。ソースは相互検証され、信頼度 (2つ以上が一致した場合は high) が報告されます。OPTIONS リクエスト (および REST インデックス) で確認します — これはハンドラーを一切呼び出さずにルートスキーマを返します — エッジでの緩和策が導入されているかどうかを判断します。Link ヘッダー、アセット URL 経由 — ヘッドレス/Next.js フロントで一般的)、ツールはそれを報告し、--discover でもスキャンします。いかなるリクエストも脆弱性を引き起こしません。POST /wp-json/batch/v1 も author_exclude も SQL も実行しません。コアバージョンが隠されている場合、ツールは推測せずにその旨を報告します (wp2shell を盲目的に確認するには、それを悪用する必要があるため)。
堅牢性: バックオフ付きリトライ、gzip/deflate デコード、https→http フォールバック、クロスホストリダイレクトの追跡、ブラウザ風の User-Agent (上書き可能)、並列マルチターゲットスキャン。
| 範囲 | 曝露 | 修正版 |
|---|---|---|
| 6.8.0 – 6.8.5 | SQL インジェクションのみ (RCE なし) | 6.8.6 |
| 6.9.0 – 6.9.4 | 事前認証 RCE | 6.9.5 |
| 7.0.0 – 7.0.1 |
pip install wp2shell-detect
または、ソースから直接実行できます (単一ファイル、依存関係なし、Python 3.8+):
git clone https://github.com/own2pwn-fr/wp2shell-detect
./wp2shell-detect/wp2shell_detect.py https://example.com
依存関係ゼロ。Python 3.8+。
wp2shell-detect https://example.com
wp2shell-detect --json https://a.example https://b.example
wp2shell-detect --targets hosts.txt --workers 16 # parallel sweep
wp2shell-detect --discover https://front.example # follow headless WP
(PyPI からインストールした場合、コマンドは wp2shell-detect です。クローンから使用する場合は、同じ引数で ./wp2shell_detect.py を呼び出してください。)
オプション: --json、--discover、--workers N、--timeout S、--user-agent UA、--insecure、--targets FILE。いずれかのターゲットが脆弱と検出された場合、終了コード 2 を返します (CI / cron スイープに便利)。
最新のサイトでは、www. に JS/Next.js フロントを配置し、WordPress を兄弟ホスト (wordpress.、wp.、cms.) に置くことがよくあります。www. をスキャンすると not WordPress が返されます — それは正しく、そのホストは WordPress ではないからです。WordPress ホストをスキャン対象にするか、--discover を渡すと、フロントの CSP / Link ヘッダー / アセット URL からツールが自動的に WordPress ホストを見つけてスキャンします。
例:
[!!] https://blog.example.com -> VULNERABLE (pre-auth RCE)
version : 6.9.3 (generator meta tag=6.9.3, RSS feed generator=6.9.3)
batch : reachable (/wp-json/batch/v1)
cves : CVE-2026-63030, CVE-2026-60137
note : WordPress 6.9.3 is in the wp2shell pre-auth RCE range. REST batch endpoint reachable — no edge mitigation.
WordPress コアを 6.8.6 / 6.9.5 / 7.0.2 以降にパッチしてください。パッチ適用を待つ必要がある場合は、エッジ (/wp-json/batch/v1 と ?rest_route=/batch/v1) でバッチルートをブロックするか、rest_pre_dispatch をフックする must-use プラグインでブロックし、その後、不正な管理者アカウントと未知のプラグインを監査してください。
許可された評価のみを対象としています。自分が所有しておらず、テストを委任されていないシステムに対してこれを実行することは、お住まいの法域では違法となる場合があります。使用方法については、あなた自身に責任があります。
MIT。LICENSE を参照。own2pwn 作。
| 事前認証 RCE |
| 7.0.2 |