Keycloakで署名検証を回避、アカウント乗っ取りの恐れ
KeycloakのSAML連携で署名検証をすり抜けられ、フェデレーション利用者のアカウントを乗っ取られる脆弱性が公表されました。SAMLを使う組織は、ベンダーの告知で影響する版と修正版を確認してください。
急ぎ度: 早めに
CVSS v3は9.1で認証なしにネットワークから悪用できる条件ですが、公表当日であり、実際の攻撃を示す情報は出ていません。
関係があるか
KeycloakをSAMLのIdPやブローカーとして使い、外部のシステムやIdPと連携している組織が対象です。SAMLを使わずOIDCだけで運用している環境は、この脆弱性の対象機能を使っていないことになります。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| Keycloak(keycloak-services) | SAMLのHTTP-Redirect bindingを扱う構成。影響する版はベンダーの告知で確認してください。 | 公表当日のため、Red Hatのセキュリティ情報とKeycloakプロジェクトの告知で確認してください。 |
確かめ方
- 1Keycloakの管理コンソールで、ClientsにSAMLのクライアントがないか、Identity ProvidersにSAMLの連携先がないかを確認します。
- 2SAMLの連携先ごとに、HTTP-Redirect bindingを使う設定になっていないかを、連携先の担当者と一緒に確認します。
- 3稼働中の版は、サーバー上で
/opt/keycloak/bin/kc.sh --versionを実行すると確認できます。コンテナ版や配布形態によってパスは異なります。
何が起きたか
KeycloakのSAMLログインで、本来は署名で守られているはずのメッセージの検証をすり抜けられ、フェデレーション利用者のアカウントを乗っ取られる脆弱性です。
原因は、SAMLのHTTP-Redirect bindingの実装にあります。サーバーはパーセントエンコードされたパラメーター名も解釈して処理しますが、署名の検証は文字どおりのパラメーター名しか見ていません。この食い違いのため、署名のない細工されたメッセージが、正規の署名付きメッセージの代わりに処理されます。CWE-347(暗号署名の不適切な検証)に分類されています。
CVSS v3のベクトルでは、機密性と完全性への影響が高く、可用性への影響はありません。サービスが止まるタイプではなく、なりすましで静かに入られるタイプの脆弱性です。
攻撃の流れ
-
1
通常のSAML連携
正規のログインでは、SAMLメッセージに署名が付き、Keycloakがそれを検証します。
-
2
細工メッセージ
攻撃者が、署名のないSAMLメッセージを細工してKeycloakに送ります。
-
3
検証の素通り
署名検証と処理でパラメーター名の解釈が食い違い、検証が働きません。
-
4
偽メッセージを処理
Keycloakが署名のないメッセージを正規のものとして受け付けます。
-
5
アカウント乗っ取り
フェデレーション利用者として認証され、アカウントを奪われます。
どう悪用されるか
認証は不要です。攻撃者は外部のネットワークから、Keycloakに届く経路があれば試せます。攻撃の複雑さは低く、被害者となる利用者に操作をしてもらう必要もありません。CVSS v3のベクトルはAV:N/AC:L/PR:N/UI:Nです。
成功すると、フェデレーション利用者のアカウントを乗っ取られます。KeycloakがSSOの要になっている環境では、その利用者として、Keycloakの認証に頼る業務システムやクラウドサービスに入られる恐れがあります。管理者権限を持つ利用者が連携に含まれていれば、被害はさらに大きくなるでしょう。
今すぐやること
-
1
SAMLの利用状況を洗い出す
SAMLのクライアントと連携先の有無を確認し、HTTP-Redirect bindingを使う経路を把握します。該当がなければ、急ぎ度は下がります。
-
2
ベンダーの告知で版を確認する
Red Hatのセキュリティ情報とKeycloakプロジェクトの告知で、影響する版と修正版を確認します。Red Hat提供の製品を使っている場合は、Red Hatの告知を優先してください。
/opt/keycloak/bin/kc.sh --version -
3
修正版に更新する
SAML連携を使っている本番環境から、修正版に更新します。外部に公開されているKeycloakは先に進めます。
-
4
ログイン履歴を見直す
SAML経由のログインのうち、利用者本人に覚えのないものがないかをイベントログで確認します。不審なログインがあれば、該当アカウントのセッションを無効化し、認証情報を再発行してください。
背景
Keycloakはオープンソースのアイデンティティ管理基盤で、社内システムやクラウドサービスのログインを一か所にまとめるSSOによく使われます。SAMLでほかのIdPや取引先と連携している場合、Keycloakの認証結果が下流のアプリにそのまま信頼されます。ここで署名検証が崩れると、個々のアプリ側に不備がなくても、アカウントの乗っ取りが成り立ちます。
SAMLのHTTP-Redirect bindingは、メッセージをURLのクエリで運び、署名もクエリの文字列に対して付ける方式です。検証する側と処理する側が、同じ入力を別の規則で読むと、署名の裏をかく余地が生まれます。今回の脆弱性はこの型にあたり、パーセントエンコードされたパラメーター名の扱いが、検証と処理で異なっていたことが原因です。
よくある質問
Q.OIDCだけを使っていて、SAMLは使っていない場合も対象ですか。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
A flaw was found in the SAML HTTP-Redirect binding implementation of Keycloak. The issue occurs because the server processes percent-encoded parameter names (like %53AMLResponse) while the signature verification logic only checks literal parameter names. An attacker can use this discrepancy to provide a crafted, unsigned SAML message that the server processes instead of a legitimately signed one, leading to full account takeover of federated users.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- web secalert@redhat.com
- web secalert@redhat.com
- web nvd.nist.gov
- web github.com