OpenObserveに認証回避の脆弱性、1.1.0で修正
OpenObserveの1.1.0より前の版で、SSOや移行で作られたユーザーのメールアドレスを知る第三者が、空のパスワードでそのユーザーになりすませる脆弱性が公表されました。該当版を使う組織は1.1.0に更新し、アクセスの記録も確認してください。
急ぎ度: 至急
CVSS v3は9.8で、認証なしにネットワーク越しで悪用でき、修正版の1.1.0もすでに出ているため、更新を急ぐ価値があります。
関係があるか
OpenObserveを自社運用している組織や、クラウド版を使っている組織のうち、SSOで自動作成されたユーザーや、データ移行で作られたアカウントがある環境が対象です。APIにインターネットや広い社内ネットワークから届く構成ほど、影響を受けやすくなります。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| OpenObserve | 1.1.0より前のすべての版 | 1.1.0 |
確かめ方
- 1稼働中のOpenObserveの版を確認します。1.1.0より前なら該当します。
- 2エンタープライズ版のSSO連携やクラウド版のSSOログインを使っているか確認します。初回ログイン時に自動作成されたユーザーが対象になるためです。
- 3過去の版から更新や移行を重ねてきたインスタンスかどうかを確認します。移行で作られたアカウントや、移行時に引き継がれた既存アカウントにも、同じ状態のものがありえます。
- 4OpenObserveのAPIがどのネットワークから届くかを確認します。インターネット側に公開されている場合は、特に急いでください。
何が起きたか
OpenObserveの1.1.0より前の版には、パスワードの確認をすり抜けて既存ユーザーになりすませる、認証回避の脆弱性があります。SSOで自動作成されたユーザーや、データ移行で作られたユーザーのアカウントが対象です。
原因は、ログイン時のパスワード照合にあります。OpenObserveは入力されたパスワードを、内部用のパスワードと外部認証用のpassword_extの二つと照合します。SSOで作られたアカウントなどではpassword_extが空か未設定のまま残ります。未設定は空文字として扱われるため、空または空白だけのパスワードが一致してしまいます。
データ取り込み用のルートは、空のパスワードを先に拒否します。一方、それ以外の保護されたAPIは400のルートパターンが影響を受けます。
悪用されると、なりすまされたユーザーの権限で、テレメトリ・アラート・ストリーム・ユーザー・セキュリティ設定の閲覧や変更に至ります。さらに、条件がそろうと認証前のリモートコード実行に発展する経路も示されています。
攻撃の流れ
-
1
対象ユーザーの特定
攻撃者がSSOや移行で作られたユーザーのメールアドレスと組織名を把握します。
-
2
空パスワードで認証
取り込み用以外のAPIに空のパスワードで要求を送ると、そのユーザーとして認証されます。
-
3
権限の行使
そのユーザーの権限で、データの閲覧や設定の変更ができてしまいます。
-
4
条件付きで任意コード実行
検索権限があれば、サービスが書き込める場所へのファイル作成を経て、コード実行に発展しえます。
どう悪用されるか
悪用に認証は要りません。OpenObserveのAPIにネットワーク経由で届く位置にいて、なりすます相手のメールアドレスと組織名を知っていれば足ります。利用者に何かを操作させる必要もありません。ただし、相手のアカウントが上記の空の状態になっていることが前提です。
被害の大きさは、なりすまされたユーザーの権限で決まります。管理者権限のアカウントなら、収集したデータだけでなく、ユーザーやセキュリティの設定まで読まれたり書き換えられたりします。
リモートコード実行への発展は、なりすましたアカウントに検索の権限があり、サービスのプロセスが書き込める場所がある場合の条件付きです。検索APIを通じて、攻撃者が内容を決めたファイルを作成・上書きできるとされています。
今すぐやること
-
1
1.1.0以上に更新する
まず稼働中の版を確認し、1.1.0より前なら修正版に更新します。更新時に必要な設定の追加は、よくある質問のとおりです。複数ノードで動かしている場合は、すべてのノードを更新します。
docker ps --format '{{.Names}} {{.Image}}' -
2
更新までの間、APIへの到達範囲を絞る
すぐに更新できない場合は、回避策の欄にある手段で、APIに届く範囲を狭めます。
-
3
侵害の跡がないか調べる
更新前の期間について、取り込み用以外のAPIへのBasic認証でのアクセス、SSOユーザーのアカウントによる見覚えのない送信元からのアクセスを調べます。あわせて、ユーザー・アラート・ストリーム・セキュリティ設定に身に覚えのない変更がないか確認します。
-
4
検索APIの利用とサーバー上のファイルを確認する
検索権限を持つアカウントの不審な検索要求と、OpenObserveのサービスが書き込める場所に見覚えのないファイルがないかを確認します。見つかった場合は、サービスが扱う認証情報や鍵も含めて入れ替えを検討します。
-
5
公式の勧告とリリースノートを確認する
回避策や追加の対応の有無、1.1.0の変更内容を、OpenObserveのGitHubにあるセキュリティ勧告とv1.1.0のリリースノートで確認します。
すぐ更新できないとき
修正版への更新が最も確実です。更新できない間は、OpenObserveのAPIにインターネットから直接届かないようにし、ファイアウォールやVPN、リバースプロキシで信頼できるネットワークからの接続だけに絞ります。これは更新までのつなぎで、公式の回避策として示されたものではありません。取り込み用のルートは空のパスワードを先に拒否するため、絞るのは管理画面や検索などのAPIが中心になります。
背景
OpenObserveはログ・メトリクス・トレースを集めて検索・可視化する監視基盤です。各システムの出力が集まるため、トークンや個人情報が混ざることがあり、管理者の権限を握られると、データの閲覧だけでなくアラートの送信先やユーザー設定にも手が届きます。
この脆弱性は、SSOで外部認証されるユーザーのために用意された外部パスワードの欄が、空のまま残ることから生じました。未設定の値を空文字に置き換えて照合する処理が重なり、空のパスワードが通る状態になっています。修正に関わるプルリクエスト(#15054)は、認証のほか、認可や外向きの通信のチェックなどもまとめて見直す内容です。
よくある質問
Q.1.1.0への更新で、設定の追加は必要ですか。
ZO_EXT_AUTH_SALTに16〜48バイトの既定値以外の値を設定しないと起動しません。値はopenssl rand -hex 24で作れます。既存の環境は現在の設定のまま動きますが、既定値や短い値を使っていると警告が出ます。8バイト未満や48バイト超の値は、argon2で使えないため起動しません。Helmチャートで構築した環境も同じ値の設定が必要です。更新前に、運用環境の設定を確認してください。この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
OpenObserve is a cloud-native observability platform. Prior to 1.1.0, the shared authentication validator in src/api/common/src/auth/validator.rs accepts an empty or whitespace-only HTTP Basic password for an account whose password_ext value is missing or empty. SSO-provisioned and migration-created users can have this state, allowing an unauthenticated attacker who knows an affected user's email address and organization to authenticate on protected non-ingestion API routes with the victim's role and permissions. A compromised privileged account can expose or modify telemetry, alerts, streams, users, and security configuration. An account with search permission can submit a DataFusion COPY ... TO statement through the search API to create or overwrite attacker-controlled files at service-process-writable locations, creating a conditional escalation to pre-authentication remote code execution. This issue is fixed in version 1.1.0.
出典: CVE.org (CVE Program・cvelistV5) NVD