This post is also available in: English (英語)
概要
Unit 42 の脅威リサーチャーは、最近行ったオープンソース Web アプリケーションに対する監査のなかで、Harbor の 2.9.5 より前のバージョンに影響を及ぼすオブジェクトレベル認可の不備 (BOLA) の脆弱性を特定しました。Harbor は広く使用されているクラウド ネイティブのコンテナー レジストリーで、クラウド環境におけるコンテナー イメージのホストやロールベースのアクセス制御 (RBAC)、脆弱性のスキャン、イメージの署名などの機能を提供する役割を果たしています。また Harbor はオープンソースの CNCF (Cloud Native Computing Foundation) を卒業したプロジェクトで、 22,600 個以上のスターと、180 万件のダウンロードという実績があります。私たちが特定した脆弱性は CVE-2024-22278 として追跡されており、CVSS スコアは 6.4 です。
本脆弱性は、生成 AI を活用した自動 BOLA 検出ツールを開発するなかで発見したものです。私たちは、AI でセキュリティ機能を強化する方法を調査する大規模な取り組みの一環として、こうしたツールの開発を行っています。
この脆弱性が悪用されると、Maintainer (メンテナー) ロールを使っているユーザーに、プロジェクトのメタデータを作成・更新・削除されるおそれがあります。公式文書によれば、これらは Harbor の UI から行うことが禁止されている特権アクションです。メタデータへの不正な変更は、データ漏えい、コンテンツ整合性の危殆化、脆弱性スキャン メカニズムの回避など、重大なリスクをもたらします。
これらのリスクを緩和するには、組織は Harbor をバージョン v2.9.5、v2.10.3、または v2.11.0 にただちに更新する必要があります。このアップデートは特定された脆弱性に対処し、潜在的攻撃からアプリケーションを保護するのに役立ちます。Harbor はこの問題に関するアドバイザリーでさらに詳しい情報を公開しています。
また、弊社の 次世代ファイアウォール製品 (NGFW) で クラウド配信型のセキュリティサービス (Advanced URL Filtering を含む) を有効にされているお客様も、より適切に保護されています。
ASM モジュールが有効な Cortex Xpanse と Cortex XSIAM をお使いのお客様は、すべてのインターネットに露出した Harbor のインスタンスをターゲット アタック サーフェス ルールを通じて検出できます。
侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらの問い合わせフォームからご連絡いただくか、infojapan@paloaltonetworks.com まで電子メールにてお問い合わせください (ご相談は弊社製品のお客さまには限定されません)。
関連する Unit 42 のトピック | API Attacks, BOLA |
BOLA の脆弱性
オブジェクトレベル認可の不備 (BOLA) は、安全でない直接オブジェクトの参照 (IDOR) とも呼ばれ、今どきの API および Web アプリケーションではよく見られる脆弱性の一種です。BOLA の脆弱性は OWASP API Top 10 でリスクの首位にランキングしており、HackerOne Global Top 10 では 4 番目に多く報告されている種類の脆弱性となっています。
先に公開した BOLA に関する研究 でも解説しているように、特定のユーザーが特定のオブジェクトのアクセス・変更・削除に必要な権限を持っているかどうかをアプリケーションが適切に確認していない場合に BOLA が発生します。BOLA でいう「オブジェクト」は、システム内のさまざまな種類のデータを指しています。たとえば「メッセージ」、「写真」、「旅行」、「ユーザー プロファイル」、「請求書」などもオブジェクトの一種です。
攻撃者は、認証リクエスト内のオブジェクト識別子を変更することで、API エンドポイントの BOLA 脆弱性を悪用できます。このような操作は、ユーザー データの不正アクセスにつながり、それがデータ漏えい、データ操作、さらにはアカウントの完全な乗っ取りにつながる可能性があります。
別の BOLA の脆弱性公開に関する記事でも論じたように、BOLA のテストは通常は手動で行われます。AI を使って検出を自動化する弊社の調査において、私たちは複数のオープンソース プロジェクトに存在する BOLA の脆弱性を発見し、それらを責任を持って開示しました。
Harbor の概要
Harbor は人気の高いコンテナー レジストリーのひとつで、ポリシーとロールベースのアクセス制御 (RBAC) を使ってコンテナー イメージを管理・保護しています。ユーザー アクションは割り当てられたロールによって決定され、プロジェクトの構成や脆弱性のスキャンなどの重要アクションを実行できるのは管理者ロールのみです。
Harbor のプロジェクトには一連のリポジトリーが含まれていて、各リポジトリーには複数バージョンのコンテナー イメージを持たせられます。アクセス制御の強化のため、Harbor はプロジェクトに RBAC を適用し、適切なロールを持つユーザーだけが特定の操作を実行できるようにしています。
プロジェクトへのアクセスを検討するさいは、Harbor が定義している 2 種類のプロジェクトを理解しておく必要があります。
- Public (パブリック): この種類のプロジェクトの場合、どんなユーザーでも、イメージをプルして他のユーザーとリポジトリーを共有することができます。
- Private (プライベート): この種類のプロジェクトの場合、プロジェクト メンバーとなっているユーザーだけがイメージをプルできます。
Harbor は、個々のプロジェクトについて、異なる権限を持つ 5 つのプロジェクトレベルのロール を定義しています。それぞれのロールは、プロジェクトの特定の側面の助けとなるように調整されています。
- Limited Guest (限定ゲスト): このロールはイメージをプルできますがプッシュできません。また、ログや他のプロジェクト メンバーを表示することはできません。
- Guest (ゲスト): このロールは読み取り専用アクセスです。イメージをプルしてタグ付けし直すことはできますが、プッシュはできません。
- Developer (開発者): このロールはプロジェクト内での読み取り・書き込みアクセスを持っています。
- Maintainer (メンテナー): このロールは昇格した権限を持っており、イメージのスキャン、レプリケーション ジョブの表示、イメージの削除、Helm チャートの削除などの権限があります。
- ProjectAdmin (プロジェクト管理者): このロールは完全な読み取り/書き込み権限と管理権限を持っており、メンバーの追加・削除、脆弱性スキャンの開始などを行えます。
Harbor の脆弱性 CVE-2024-22278 の説明
Harbor における BOLA の脆弱性は、プロジェクトのメタデータに基づくものです。
Harbor のソースコードにおいて、このメタデータは、プロジェクトに関連付けられる特定の情報や設定を指しています。これらの設定はプロジェクトの重要な構成を制御するものです。たとえば、プロジェクトを非公開または公開にする、検証済みイメージのみをデプロイできるようにする、プッシュされたイメージに対して脆弱性スキャンを実施する、などが含まれています。
Harbor のドキュメントによると、これらの構成の設定を変更できるのは ProjectAdmin ロールのみです。
それを検証して確認するため Harbor の API にアクセスしたところ、Harbor Web UI と API の間では動作に一貫性がないことがわかりました。
私たちはまず、Maintainer ロールを持つユーザーは、Web UI 経由ではプロジェクトの構成メタデータを作成・更新・削除できないことを確認しました。図 1 は、Maintenance ログインによる Harbor UI コンソールを示しています。図 1 の 5 つのチェックボックスはすべて灰色になっていることに注意してください。ユーザーがこれらのボックスをチェックしたりチェックを外したりしても、これらの設定は変更されません。
図 2 は、ProjectAdmin ロールでログインしたさいの Harbor UI コンソールの同じ構成設定を示したものです。この場合、チェックボックスは灰色ではなく、これらの設定を変更できることが視覚的に示されています。
ただし、Harbor の API を使って Maintainer ロールを確認したところ、Maintainer ロールは、ソースコード内で指定されている有効な {meta_name} の値を使ってプロジェクトのメタデータを変更できることに気付きました。そのさいのリクエストは次のとおりです。
- PUT /projects/{project_name_or_id}/metadatas/{meta_name}
- POST /projects/{project_name_or_id}/metadatas/{meta_name}
- DELETE /projects/{project_name_or_id}/metadatas/{meta_name}
私たちが API 経由で Maintainer ロールを使って上記のリクエストを確認してみたところ、これでプロジェクトのメタデータは実際に変更されました。これらは ProjectAdmin ロールでのみ実行されるべき機能です。
この脆弱性により、Maintainer ロールを持つユーザーが、ProjectAdmin のみが実行できるはずのタスクを実行できるようになります。
脆弱性の影響
Maintainer ロールの権限は高く、悪意を持って行動すればさまざまな方法でプロジェクトに損害を与えうるとはいえ、この BOLA の脆弱性があることで、Maintainer ロールの権限はさらに拡張されることになります。この脆弱性を悪用すると、Maintainer がプロジェクトを公開したり、検証されていないイメージを展開したり、必須の脆弱性スキャン プロトコルをバイパスしたりできるようになります。
攻撃者が Maintainer ロールを通じて Harbor システムにアクセスした場合、この BOLA により攻撃者は ProjectAdmin を変更できるようになります。これらの変更には、脆弱なイメージや悪意のあるイメージのデプロイ、機微なプロジェクト データの公開、プロジェクトの整合性やセキュリティ体制のさらなる危殆化などが含まれる可能性があります。
図 3 は私たちが Postman を使って API を呼び出し、Private に設定されているプロジェクトを Public に変更している様子を示しています。私たちはこれを、Maintenance レベルのアクセス権を持つアカウントから実行しました。そして、Maintenance レベルのアカウントからのこの API 呼び出しにより、プロジェクトの権限が実際に Private から Public に変更されたことを確認しました。
この問題は、アプリケーションにおけるオブジェクトレベル認可の不備 (BOLA) によって、プロジェクトのメタデータ構成などの特定オブジェクトの不正操作を許しているものです。したがって、これは BOLA の脆弱性のひとつに分類されます。
修正と緩和策
Harbor は CVE-2024-22278 の修正をリリースし、バージョン v2.9.5、v2.10.3、または v2.11.0 にアップグレードして BOLA のリスクを緩和するようユーザーに勧告しています。
開示プロセス
- 2024-04-24: Unit 42 が同脆弱性を Harbor のメンテナーに電子メールで報告
- 2024-05-06: Harbor のメンテナーが脆弱性を確認
- 2024-07-02: CVE-2024-22278 が予約される
- 2024-07-31: Harbor が脆弱性を修正したバージョン v2.9.5、v2.10.3、v2.11.0 をリリース
結論
本稿では、Unit 42 リサーチャーが Harbor において発見した 1 件の BOLA 脆弱性について詳しく説明しました。この発見にさいしては AI を活用した新たな自動化手法が使われました。API 利用の急増とともに、API の脆弱性、とくに BOLA 脆弱性が広く見られるようになってきています。この脆弱性は悪用が容易で潜在的影響が大きいため、影響を受ける組織はできるだけ速やかに修正済みバージョンに更新することをお勧めします。
パロアルトネットワークスのリサーチャーは、AI を活用して BOLA の脆弱性を自動検出する新たなテクノロジーを積極的に開発しています。この取り組みはまだ初期段階ですが、よりスケーラブルで効率的かつ効果的な検出ソリューションの作成に向け、大きく進歩してきています。
本脆弱性に関連するリスクを緩和するには、組織は Harbor をバージョン v2.9.5、v2.10.3、または v2.11.0 にただちに更新する必要があります。このアップデートは特定された脆弱性に対処し、潜在的攻撃からアプリケーションを保護するのに役立ちます。
また、弊社の次世代ファイアウォール製品 (NGFW) で Cloud-Delivered Security Services (クラウド配信型のセキュリティサービス) を有効にされている場合もより適切に保護されます。たとえば Advanced URL Filtering は同脆弱性に対するプローブ要求を「スキャン アクティビティ」として分類できます。
ASM モジュールが有効な Cortex Xpanse と Cortex XSIAM をお使いのお客様は、すべてのインターネットに露出した Harbor のインスタンスをターゲット アタック サーフェス ルールを通じて検出できます。
侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらの問い合わせフォームからご連絡いただくか、infojapan@paloaltonetworks.com まで電子メールにてご連絡いただくか、下記の電話番号までお問い合わせください(ご相談は弊社製品のお客様には限定されません)。
- 北米フリーダイヤル: 866.486.4842 (866.4.UNIT42)
- EMEA: +31.20.299.3130
- APAC: +65.6983.8730
- 日本: (+81) 50-1790-0200
パロアルトネットワークスは、これらの調査結果を Cyber Threat Alliance (CTA: サイバー脅威アライアンス) のメンバーと共有しました。CTA のメンバーはこのインテリジェンスを使って、お客さまに保護を迅速に提供し、悪意のあるサイバー攻撃者を体系的に阻害できます。詳細は Cyber Threat Alliance にてご確認ください。