Azure Cosmos DB の組み込みJupyter Notebook機能に関する脆弱性について

26日(日本だと27日)に「MSのクラウドのデータベースに脆弱性 数千社に通知」みたいなタイトルのニュース記事がロイターからありました。情報不足で正確性にかけるタイトルですが。

より細かい詳細はそのうちでるかも知れませんが現状はこちらを参照。

脆弱性の概要

Cosmos DB組み込みのJupyter Notebook機能を悪用することで、他の顧客のJupyter Notebookを操作してCosmos DBのプライマリキーや(Jupyter Notebookが参照する)Blobストレージへのアクセストークンにアクセスできるというもののようです。キーが入手できればCosmos DBの中身を参照したり(削除も可)しほうだい、というわけですね。細かな方法についてはWizの記事にありますが、Jupyter Notebookの設定ミスのせいで他の顧客のJupyter Notebookへ特権昇格が可能だったということのようです。

ただMicrosoftの調査によると実際に悪用されてキーが悪用されたのはWizが調査のためにアクセスしたものだけのようです。

影響範囲

概要にもあるとおり、組み込み Jupyter Notebook機能を有効にしたCosmos DBアカウントが脆弱性がある状態でした。この機能は現在29リージョンでPreview提供中なのですが、2021年2月10日以降に作成したCosmos DBアカウントは既定で有効なようです。

つまり、該当リージョンにCosmos DBアカウントがあり、組み込みJupyter Notebook機能を有効にしていた もしくは 2021年2月以降にCosmos DBアカウントを作成していた場合、脆弱性がある状態だったと言えます。該当Cosmos DBアカウントがある場合、先日Microsoftから今回の件に関するメールを受け取っていると思います。
日本で言えば西日本リージョンが対象なようですね。東日本リージョンはなぜか対象外。

また読み取れる状態だったキーもプライマリ読み取り・書き込みキーのみで、プライマリの読み取り専用キーやセカンダリの読み取り・書き込みキー、セカンダリの読み取り専用キーは問題なかったようです。

脆弱性に対する対応

すでに脆弱性は修正された状態のようです。また影響範囲にあったアカウントのキーをつかった不正なアクセスは(報告者のもの以外は)無かったようですが、漏れている可能性はゼロでは無いので対象アカウントはプライマリキーを再生成することが推奨されています。

対策他

現状、Cosmos DBには Azure Storage アカウントのようにアクセスキーによる操作を無効にする(RBACなどのみに制限する)機能が無いので、今回のケースを完全に防ぐのは難しいところですが少なくともキーが露出する個所を減らしたり検出を行うことで対応は可能になると思います。(そういう意味で今回のケースは厳しい内容なのですが)

セキュリティガイドラインやベースラインのドキュメントが参考になると思います。
とりあえずRBACを使ってデータプレーンやコントロールプレーンのアクセス時にIDが明確にわかるようにする、診断ログを有効にしてアクセスを追跡できるようにする、ネットワークアクセスを制限する、ATPで異常アクセスを検出できるようにするなどでしょうか。

2021.08.31 追記

以下のドキュメント通り disableLocalAuth プロパティをtrueにすればプライマリ・セカンダリキーを無効にしてRBACを強制できるようです。

ただしRBACサポートが現状SQL API(Core API)だけみたいなので他のAPI使ってる場合は注意しましょう。あと.NETだと v3 SDKなどバージョン依存もあるのでロールやアプリの環境なども注意。

教訓

蟻の一穴とはちょっと違いますが、一番脆いところが崩れるものなので提供側としてもこれを教訓に常に意識しておきたいですね。利用者側もわざわざ自分から脆くしないように注意したいところです。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中