
2024年6月19日 海外のセキュリティコンサル企業「Nokod Security」がMicrosoft Power BI で機密情報が公開される脆弱性を指摘しました。Microsoft はこの脆弱性をレポートの共有ロールの問題であるとして現在、脆弱性ではないという見解を発表しています。
目次
概要
Microsoft Power BI の脆弱性は悪用が非常に容易で、攻撃者は Power BI サービスで生成されたレポートには表示されないものの、その基礎となるデータ モデルの一部である情報を抽出できます。
また、潜在的なデータ漏洩シナリオには、次の情報へのアクセスが含まれます。
- 集約または匿名化されたデータの背後にある詳細かつ潜在的に機密性の高いデータ
- 表示されたレポートに含まれていなかった追加の属性とデータ資産
- 表示から除外された追加のデータレコード
Nokod は 2024 年 5 月 16 日に Microsoft セキュリティ レスポンス センター (MSRC) に調査結果を報告し、2024 年 5 月 18 日に Microsoft はこの問題を確認しましたが、これを脆弱性ではなく機能であるとみなしました。
Nokod Security は診断ツールをリリース済み
Nokod Security は、組織がこの脆弱性に対する露出度を評価するのに役立つシンプルで無料のツール「Power BI Analyzer 」を作成しました。こちらからダウンロードできます。
技術概要
問題となってくるMicrosoft Power BI の仕様はレポート オブジェクトが共有されると、共有されたユーザーからセマンティック モデルによって表される「基礎のデータ」へアクセス可能になる事です。
セマンティック モデルについて
すべての Power BI レポートは、セマンティック モデルに基づいて構築されます。セマンティック モデルは視覚化に使用できるすべてのデータを表示しますが、
レポート オブジェクトは、どのデータが実際にUI に表示されるか、およびその方法を定義します。
レポート オブジェクトの問題点
レポート オブジェクトが他のユーザーと共有されると (ワークスペースを共有することで明示的または暗黙的に)、
セマンティック モデルによって表される基礎となるすべての生データ もそれらのユーザーからアクセス可能になります。
アクセス可能になる情報は次のものが含まれます。
- レポートのUIで集計を表示するために使用される詳細なデータレコード
- セマンティック モデルに含まれていて、レポートにはまったく表示されないテーブル (これらのテーブルがモデル内で明示的に「非表示」としてマークされている場合でも)
- レポートの UI に表示されないテーブルの非表示列 (詳細または集計として、またこれらの列がモデル内で明示的に「非表示」としてマークされている場合でも)
- 表示でこれらのレコードがフィルター処理される場合でも、表示で使用されるテーブルの詳細データ レコード。
データは権限のないユーザーにも公開されるだけでなく、隠されている追加データを誰でも簡単に見つけ出して閲覧することができます。
この動作は、組織内でアクセス可能なレポートと、Web に公開されるレポートに影響します。
Microsoft Power BI の「脆弱性」の詳細
Power BI レポートを実行するには、表示するデータを抽出する API 呼び出しが必要です。
以下は、公開されているレポートの次のエンドポイントへの POST 要求です。
https://wabi-west-europe-f-primary-api.analysis.windows.net/public/reports/querydata
組織内のユーザーのみが利用できるレポートには、別の API エンドポイントが使用されます。
https://pbipweu14-westeurope.pbidedicated.windows.net/webapi/capacities/<capacityObjectId>/workloads/QES/QueryExecutionService/automatic/public/query
呼び出しのペイロードは、独自の Power BI 形式でクエリを表す JSON メッセージです。この API への呼び出しは、レポートに含まれるビジュアルごとに行われます。応答には、要求されたデータの JSON 表現が含まれます。
最初の例では、ペイロードに「Products」テーブルの「name」列を取得するためのクエリが含まれています。このクエリは、名前に文字「c」が含まれる製品にデータを制限します。

画像引用:Nokod Security
非表示ユーザーでもクエリで指定のデータを要求できる
ユーザーは、レポートの基礎となるセマンティック モデルの一部である限り、
クエリする列とテーブルの名前を要求することもできます。
これは、その列とテーブルがセマンティック モデルの所有者によって「非表示」としてマークされている場合でも当てはまります。
前の例で示したように、フィルターと集計を削除するのは非常に簡単で、データ ソースのスキーマに関する知識は必要ありません。
ただし、視覚化に含まれていないデータを追加するには、攻撃者はスキーマに関する知識が必要になります。
スキーマの取得もAPIで可能に
これは、Power BI レポートの生成に使用される別の API 呼び出しによって取得できます。公開可能なレポートの場合、呼び出しは次のエンドポイントへの POST 要求です。
https://wabi-west-europe-f-primary-api.analysis.windows.net/public/reports/conceptualschema
組織内のユーザーのみが利用できるレポートには、別のエンドポイントが使用されます。
https://wabi-west-europe-f-primary-redirect.analysis.windows.net/explore/conceptualschema
この API 呼び出しの応答には、レポートの作成者によって「非表示」としてマークされている場合でも、視覚化で使用されていない列とテーブルを含む、レポートのセマンティック モデル全体の表現が含まれます。
次の例では、SQL DB をレポートに接続し、「secrets」テーブルを非表示にします。図の通り、これは「conceptualschema」API の呼び出しによって返され、すべての列と値は「query」API を通じてアクセスできます。

画像引用:Nokod Security
意図しているか関わらず検索エンジンにクロールされるPower BI レポート
この脆弱性は、Power BI レポートを社内で共有するほぼすべての組織に影響を及ぼしますが、より
重大な懸念は、意図的か否かにかかわらずレポートを Web に公開する組織にあります。
企業、製品、金融、医療、政府などの情報を外部に共有するために、組織によって何万ものレポートが意図的に公開されています。匿名化されたデータをグラフや要約の形で一般に公開している政府機関や商業組織の例がいくつかあることに一般的な事です。
実際、検索エンジンの助けを借りれば、Web 上に公開されている多数の Power BI レポートを見つけるのは非常に簡単です。site :app.powerbi.com inurl:”view?r=” などの単純な検索文字列では、文字通り無数の結果が返されます。たとえば、Bing では 160,000 件を超える結果が返されました。
検索エンジンから特定の文字列を含むレポートを取得
この検索文字列のバリエーション、たとえばsite:”https://app.powerbi.com/view?r=” + sales を使用すると、より焦点を絞った結果が得られます。
この特定の検索文字列に基づくクエリの中には、50,000 件を超える結果が生成されたものもあります。
結果の多くは、サービス プロバイダーが顧客向けに Power BI スキルを実証するために作成したサンプル レポートですが、実際の組織からの実際のデータを表す結果も多数あります。
先ほど示した簡単な API 呼び出しを使用すると、レポートが意図しないデータや機密データを公開するかどうかを簡単に判断でき、その後、この情報を自由に取得できます。
公開レポートからクエリを指定し機密データを抽出
「Nokod Security」は絞り込んだ検索用語と手動検査を適用した結果、この脆弱性にさらされ、追加の機密データが抽出される可能性のある数十のレポートをすぐに検出しました。
繰り返しになりますが、この膨大な数の検索結果を手動でランダムにスクリーニングした結果、悪用可能なレポートの例を多数発見できたという事実は、このリスクの深刻さを物語っています。
脆弱であると判明した組織の中には、意図せず PHI を公開している州政府のサイト、従業員データを公開している大学、PII を公開している自治体などがありました。
Microsoftの見解
Microsoft の見解は、発見された動作は脆弱性ではなく設計上の選択であるということです。
したがって、レポートを作成して共有する組織は、機密情報を漏洩しない方法でレポートを作成する責任があります。
Nokod Securityは、この動作 (特に「非表示」の列とテーブルに関して) に関する Microsoft の評価には同意していませんが、レポートを作成する際に組織がデータを保護できるように、次のガイドラインを作成しました。
Nokod SecurityのMicrosoft Power BIに関するガイドライン
- レポートのセマンティック モデルで「非表示」のテーブルと列を使用する代わりに、それらをセマンティック モデルから完全に削除します。これはテーブルの場合は簡単に実現できますが、個々の列の場合は可能でも少し複雑です。
- レポートにデータ テーブル全体のサブセットのみを表示する場合 (たとえば、特定の地域の従業員のデータのみ、特定の製品セットのデータのみなど)、Power Query 式を使用して、「セマンティック モデル」に添付する「データ ソース」を制限します。
この方法では、セマンティック モデルはデータ ソースに直接アクセスせず、サブセットのみにアクセスします。 - 集計データを表示する場合は、セマンティック モデルの基になるデータ ソースの非機密列のみを選択するようにしてください。何らかの理由でこれが不可能な場合 (集計が機密列の関数に基づいている場合など) は、Power Query 式を使用して「データ ソース」のデータを集計します。
さらに、組織では、Power BI 環境を頻繁に確認して、意図せずに Web に公開されたレポートや、組織内で過剰に共有されたレポートがないかどうかを確認することがベスト プラクティスです。レポートを広く共有する必要がある場合は、レポートのセマンティック モデルが上記のガイドラインに従っていることを確認してください。
引用:In Plain Sight: How Microsoft Power BI Reports Expose Sensitive Data on the Web