Outline、Azure SSOで他人になりすまし可能 修正版1.11.0
Wikiツール Outline の Microsoft Azure SSO に、他社の Microsoft Entra テナントを持つ攻撃者が既存ユーザーになりすましてログインできる弱点が見つかりました。Azure SSO を使い、AZURE_TENANT_ID を設定していない Outline が対象で、修正版は 1.11.0 です。該当する場合は版の更新を行い、更新できない間は AZURE_TENANT_ID の設定を確認してください。
急ぎ度: 至急
深刻度はcriticalで、条件に当てはまると被害者の操作なしに全文書へアクセスされますが、実際の悪用が確認されたとの情報は公表されていません。
関係があるか
Outlineを自社で運用し、ログインにMicrosoft Azure SSOを使っていて、環境変数 AZURE_TENANT_ID を設定していない組織が対象です。この変数は既定では未設定で、その場合は任意のMicrosoftテナントからの認証を受け付ける動作になります。
| 製品 | 影響を受ける版 | 直った版 |
|---|---|---|
| Outline(Microsoft Azure SSO を有効にし、`AZURE_TENANT_ID` が未設定の環境) | 1.11.0より前の版(影響を受ける最初の版は公表されていません) | 1.11.0 |
確かめ方
- 1Outlineの版を確認します。1.11.0より前であれば更新が必要です。管理画面や、コンテナ運用ならイメージのタグで確かめられます。
- 2ログインにMicrosoft Azure SSOを使っているかを確認します。使っていなければ、この弱点の前提条件に当てはまりません。
- 3Outlineを動かしている環境で
AZURE_TENANT_IDが設定されているかを確認します。未設定なら、複数テナントを受け付ける既定の動作になっています。 - 4Outlineのログイン画面にインターネットなど社外から到達できるかも確認してください。到達できる場合は優先度が上がります。
何が起きたか
OutlineにMicrosoftのSSO(シングルサインオン)でログインする仕組みの中で、本人のメールアドレスが確認済みかどうかの判定に誤りがありました。その結果、自分用の無料のMicrosoft Entraテナントを持つ人なら誰でも、Outlineを使う他社の既存ユーザーとしてログインできてしまいます。ログインに成功した攻撃者は、被害者が読み書きできる文書、コレクション、設定のすべてに触れられます。被害者側の操作は必要ありません。
原因は plugins/azure/server/auth/azure.ts にあります。OutlineはMicrosoft Graph APIが返す mail 属性を「組織が管理する信頼できる値」とみなし、メールアドレスの確認済み判定に使っていました。しかし mail は自由に書き換えられる連絡先用の項目で、ドメインの所有確認は行われません。ドメインに結び付いているのは userPrincipalName のほうです。そのため、攻撃者が自分のテナントで mail に他人のアドレスを入れると、本来使うべき xms_edov や email_verified といった確認用の情報を見る前に、確認済みと判定されます。
さらに server/commands/accountProvisioner.ts では、攻撃者のテナントIDが登録済みのものと一致せずエラーになった場合でも、同じワークスペースの azure 認証プロバイダーを探し直し、メールアドレスの一致だけでユーザーを結び付ける処理が働きます。server/commands/userProvisioner.ts で既存ユーザーへの結び付けを防ぐ唯一の確認が「確認済みでなければ拒否」というものでした。誤った確認済み判定によって、この最後の防御も通過されます。
この種の問題は、MicrosoftがnOAuthとして注意を呼びかけている攻撃の型に当たります。
攻撃の流れ
-
1
別テナントを用意
攻撃者は自分が管理するMicrosoft Entraテナントを使い、Outlineの複数テナント受け付けの状態を利用します。
-
2
被害者の宛先を名乗る
自分のアカウントの連絡先属性に、被害者のメールアドレスを設定してサインインします。
-
3
確認済みと誤判定
Outlineが書き換え可能な属性を信頼し、メールアドレスを確認済みとして扱います。
-
4
既存ユーザーに結合
テナント不一致のエラーが回復処理で吸収され、メールの一致だけで被害者のアカウントに結び付きます。
-
5
被害者として操作
攻撃者は被害者の権限で文書や設定を読み書きできます。
どう悪用されるか
攻撃者に必要なのは、自分で管理できるMicrosoft Entraテナントと、狙うユーザーのメールアドレス、そしてOutlineのログイン画面へ到達できる経路です。無料のテナントで足りるとされており、Outline側のアカウントや事前の認証は要りません。被害者がリンクを開く、承認するなどの操作も不要です。
悪用されると、攻撃者は被害者と同じ権限のセッションを得ます。被害者が見られる文書やコレクションの閲覧、編集、削除、設定の変更が可能です。管理者のメールアドレスを狙われた場合は、ワークスペース全体の設定にも影響が及びます。
深刻度はcriticalとされています。一方、CVSSスコアやEPSS(悪用される見込み)は公表されておらず、実際の攻撃で悪用された事例が確認されたという情報もありません。KEV(米国CISAの悪用確認済みリスト)への掲載も確認されていません。
今すぐやること
-
1
該当するかを確かめる
Azure SSOを使っているか、
AZURE_TENANT_IDが未設定か、Outlineの版が1.11.0より前かを確認します。ログイン画面が社外から到達できる場合は、確認を最優先にしてください。env | grep AZURE_TENANT_ID -
2
Outlineを1.11.0以降に更新する
修正版は1.11.0です。更新前にデータベースと設定のバックアップを取り、ステージング環境などで動作を確認したうえで本番に適用します。ベンダーのリリース情報も併せて確認してください。
-
3
更新までの間は `AZURE_TENANT_ID` を設定する
自社のEntraテナントIDを
AZURE_TENANT_IDに設定すると、複数テナントを受け付ける動作を止められます。ただし、自社以外のテナントのユーザーをログインさせている場合は、設定後にログインできなくなります。事前に確認してください。 -
4
不審なログインがないか確認する
身に覚えのないサインイン、普段と異なる場所からのアクセス、文書や権限の不自然な変更がないかを確認します。公表時点で悪用の確認はありませんが、更新前の期間に狙われていた可能性は否定できません。
-
5
不審な点があれば権限とセッションを見直す
管理者など影響の大きいアカウントを優先し、不審な操作があれば該当ユーザーのセッションの無効化と権限の再確認を行います。具体的な手順はOutlineの公式ドキュメントで確認してください。
すぐ更新できないとき
AZURE_TENANT_ID に自社のMicrosoft EntraテナントIDを設定し、複数テナントを受け付ける動作を止める方法があります。これは弱点の前提条件である未設定状態を解消するものですが、ベンダーが正式な回避策として案内しているかは公表されていません。設定後は自社のユーザーが引き続きログインできるかを確かめ、恒久的な対処としては1.11.0以降への更新を行ってください。
背景
Outlineはチームの文書やナレッジを共有するためのWiki型ツールで、社内の手順書、設計資料、議事録などが集まりやすい場所です。ログインをMicrosoft Entra IDなどのSSOに任せる運用が多く、SSOの判定に誤りがあると、パスワードを破らなくても他人の権限で全情報に触れられる状態になります。
OAuthやOpenID Connectで、変更可能なメールアドレスの属性を、本人確認済みの識別子として扱ってしまう誤りは、以前から繰り返し問題になってきました。MicrosoftもnOAuthと呼んで、アプリ開発者に注意を促しています。アプリ側は、メールアドレスではなく、確認済みであることが保証された情報で利用者を結び付ける必要があります。
よくある質問
Q.`AZURE_TENANT_ID` を設定していれば影響はありませんか。
Q.Azure SSOを使っていないOutlineは影響を受けますか。
Q.すでに攻撃を受けたかどうかは分かりますか。
まだ分かっていないこと
- 影響を受ける最初の版は公表されていません。1.11.0より前の版は更新の対象として扱ってください。
- CVE番号、CVSSスコア、EPSSは現時点で確認できていません。悪用が確認された事例も公表されていません。
- Outlineのクラウド版を含め、運用形態ごとの影響や対応状況は公表されていません。詳細はOutlineのセキュリティアドバイザリで確認してください。
この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 直った版 |
|---|---|---|---|
| other | Outline |
< 1.11.0 |
1.11.0 |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
Summary
When Outline is configured with Microsoft Azure SSO and AZURE_TENANT_ID is unset (the default multi-tenant mode), an attacker who controls any free Microsoft Entra tenant can sign in as any existing user of any Azure-SSO-enabled workspace. The attacker sets the mail attribute on their own Entra user to the victim's email address — Microsoft performs no domain-ownership check on this attribute — and initiates a sign-in. Outline treats the mail value from the Microsoft Graph API as proof that the email is verified, bypassing the intended xms_edov/email_verified verification claims. The attacker receives a session as the victim with full read/write access to every document, collection, and setting the victim can reach. No interaction from the victim is required.
Details
The vulnerability is in plugins/azure/server/auth/azure.ts in the Azure SSO callback handler. The file is analyzed against commit 621b00ffc7e7bd09bf56292bfceeba093c6c760b.
1. Multi-tenant endpoint accepts any Entra tenant
At line 81, when AZURE_TENANT_ID is unset the strategy uses Microsoft's multi-tenant common endpoint, allowing authentication from any Microsoft tenant:
// plugins/azure/server/auth/azure.ts:81
useCommonEndpoint: env.AZURE_TENANT_ID ? false : true,
AZURE_TENANT_ID is optional and unset by default (plugins/azure/server/env.ts:27).
2. Email resolved from attacker-controlled sources
At lines 136–139, the user's email is resolved with a…
出典: GitHub Repository Security Advisories (Game のスタック) GitHub Advisory OSV
参照URL
- GITHUB_REPO_ADVISORY outline/outline