脆弱性

生成 AI ツールによる Easy!Appointments の BOLA 脆弱性の特定自動化

Clock Icon 3 min read

This post is also available in: English (英語)

概要

パロアルトネットワークスは人工知能 (AI) を利用したセキュリティ対策の研究開発に積極的に取り組んできました。その一環として、Unit 42 のリサーチャーは Web アプリケーションの BOLA (Broken Object-Level Authorization、オブジェクトレベル認可の不備) 脆弱性の監査に生成 AI (GenAI) を活用する自動 BOLA 検出ツールを開発しました。

私たちは 2023 年にオープンソース プロジェクト Easy!Appointments のテストにこのツールを使い、15 件の BOLA 脆弱性を発見しました。当該ベンダーは弊社からの通知を受けてこれらの脆弱性を修正済みです。今回私たちが発見した脆弱性の数からは、いかに API アプリケーションに BOLA 脆弱性が広く見られるかがわかりますし、このことはまた、深刻なものになりうるこれらの脆弱性をめぐってソフトウェアを継続的に精査することの重要性も物語っています。

Easy!Appointments は、予定の日程を設定・管理したり、人気カレンダー サービスとデータを同期したりするのに使われている人気ツールです。私たちが発見した脆弱性が悪用された場合、権限の低いログイン ユーザー (たとえば Customer) が、より高い権限を持つユーザー (たとえば Provider や Admin など) の作成した予定を表示・操作できるようになります。

私たちが発見した脆弱性は CVE-2023-3285CVE-2023-3290CVE-2023-38047CVE-2023-38055 の番号で追跡されており、これらはすべて異なる API エンドポイントに影響します。これらの脆弱性には、5 から 9.9 までの CVSS スコアが割り当てられており、うち 7 つのスコアが 9.9 です。

これらの脆弱性を発見後、私たちはメンテナーと緊密に協力しあい、最新バージョンの 1.5.0 ですべての問題を修正しました。リスクの緩和のため、組織の皆さんには Easy!Appointments をバージョン 1.5.0 とそれ以降にただちにアップグレードすることをお勧めします。最新バージョンへのアップデートに関する詳細については、info@easyappointments.org までお問い合わせください。

ASM モジュールが有効な Cortex XpanseCortex XSIAM をお使いのお客様はすべてのインターネットに露出した Easy!Appointments のインスタンスと未知の安全でないインスタンスをターゲット アタック サーフェス ルールを通じて検出できます。

侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらの問い合わせフォームからご連絡いただくか、infojapan@paloaltonetworks.com まで電子メールにてお問い合わせください (ご相談は弊社製品のお客さまには限定されません)。

関連する Unit 42 のトピック API Attacks, BOLA

オブジェクトレベル認可の不備 (Broken Object-Level Authorization: BOLA)

オブジェクトレベル認可の不備 (BOLA) は、安全でない直接オブジェクトの参照 (IDOR) とも呼ばれ、今どきの API および Web アプリケーションではよく見られる脆弱性の一種です。この脆弱性は OWASP API Top 10 でリスクの首位にランキングしており、HackerOne Global Top 10 では 4 番目に多く報告されている種類の脆弱性となっています。

最近公開した BOLA の脆弱性に関する記事 でも解説しているように、特定のユーザーが特定のオブジェクトのアクセス・変更・削除に必要な権限を持っているかどうかをアプリケーションが適切に確認していない場合に BOLA が発生します。この文脈において「オブジェクト」は、システム内のさまざまな種類のデータを指しています。例えば「メッセージ」、「写真」、「旅行」、「ユーザー プロファイル」、「請求書」などもオブジェクトの一種です。

攻撃者は、リクエスト内のオブジェクト識別子を変更することで、API エンドポイントの BOLA 脆弱性を悪用できます。このような操作は、ユーザー データへの不正アクセスにつながり、それがデータ漏えい、データ操作、さらにはアカウントの完全な乗っ取りにつながる可能性があります。

BOLA の検出

BOLA の手動検索はおおむね単純ですが、そのプロセスの自動化は単純ではありません。BOLA のテストは歴史的に手動で実行されてきましたが、その理由は Web アプリケーションのワークフローやビジネス ロジックの複雑さ、最新 Web アプリケーションのステートフルな性質にあります。

パロアルトネットワークスのリサーチャーは、AI を活用して BOLA の脆弱性を自動検出する新たなテクノロジーを積極的に開発しています。私たちは社内でこれらの AI 検出処理を使い、新たな展開を日々検証できるようにしています。

弊社がいちばん最近公開した脆弱性は CVE-2024-1313 ですが、これは 2,000 万人以上のユーザーを抱えるオープンソース プロジェクト Grafana における BOLA 脆弱性です。

Easy!Appointments の概要

Easy!Appointments は、オープンソースの Web アプリケーションで、予定の日程を組むために設計されています。カスタマイズ性が高く、既存の Web サイトとの統合や、Google カレンダーや CalDAV サーバーとの同期が可能です。

このソフトウェアは無料で利用できますが商用利用もサポートしていて、プレミアム サービスはビジネス利用ユーザーを対象にしています。大規模な組織でよく使われていて、熱心な開発者コミュニティが維持管理しています。

Easy!Appointments にはさまざまなユーザー ロール用の権限システムがあります。Admin (管理者) 以外のすべてのロールは、低い権限を持つものと見なされます。

  • Customer (顧客): このロールは、予定ページにアクセスして自分の予定のみを管理できます。
  • Provider (プロバイダー): このロールは、予定と Customer の情報を管理しますが、サービスやシステム設定の管理などの管理タスクは処理できません。
  • Secretary (秘書): このロールはプロバイダーと似ていますが、予定を直接は設定しません。管理設定にアクセスすることなく、割り当てられたプロバイダーのスケジュールを管理します。
  • Admin (管理者): このロールは、サービス定義、ユーザー管理、システム設定など、すべてのシステム リソースとアクションに対する完全なアクセス権を持ちます。

脆弱性の説明

本セクションでは、弊社の調査から明らかになった 15 件の脆弱な API パスの概略を述べます。これらの脆弱性の大半は UI コンソールではなく API 経由で悪用されうるものです。各パスは、1 つないし複数の HTTP メソッド (GETPOSTPUTDELETE など) に対して脆弱である可能性があります。

バックエンド側が呼び出し元 ID の確認と検証を十分に行っていないために、ほとんどの API エンドポイントが BOLA に対して脆弱です。特定された 15 件の CVE のうち、9 件は深刻度が「Critical (緊急)」(CVSS 9.0 以上)、5 件は深刻度が「High (重要)」(CVSS 7.0 ~ 9.0)、1 件は深刻度が「中程度」(CVSS 4.0 ~ 6.9) と評価されています。

  • CVE-2023-3287 (CVSS=9.9): POST /admins における BOLA 脆弱性で、低い権限を持つユーザーがシステム内に高い権限を持つユーザー (Admin) を作成できるようになります。この結果、権限の昇格が発生します。
  • CVE-2023-38048 (CVSS=9.9): GET, PUT, DELETE /providers/{providerId} における BOLA 脆弱性で、低い権限を持つユーザーがより権限の高いユーザー (Provider) を取得・変更・削除できるようになります。この結果、不正アクセスや不正なデータ操作が発生します。
  • CVE-2023-38049 (CVSS=9.9): GET, PUT, DELETE /appointments/{appointmentId} における BOLA 脆弱性で、低い権限を持つユーザーが、任意の権限を持つユーザー (Admin を含む) の予定を取得・変更・削除できるようになります。この結果、不正アクセスや不正なデータ操作が発生します。
  • CVE-2023-38050 (CVSS=9.1): GET, PUT, DELETE /webhooks/{webhookId} における BOLA 脆弱性で、低い権限を持つユーザーが、任意の権限のユーザー (Admin を含む) の webhook を取得・変更・削除できるようになります。CVE-2023-3288この結果、不正アクセスや不正なデータ操作が発生します。
  • CVE-2023-38051 (CVSS=9.9): GET, PUT, DELETE /secretaries/{secretaryId} における BOLA 脆弱性で、低い権限を持つユーザーが、低い権限を持つユーザー (Secretary) を取得・変更・削除できるようになります。この結果、不正アクセスや不正なデータ操作が発生します。
  • CVE-2023-38052 (CVSS=9.9): GET, PUT, DELETE /admins/{adminId} における BOLA 脆弱性で、低い権限を持つユーザーが、高い権限を持つユーザー (Admin) を取得・変更・削除できるようになります。この結果、不正アクセスや不正なデータ操作が発生します。
  • CVE-2023-38053 (CVSS=9.9): GET, PUT, DELETE /settings/{settingName} における BOLA 脆弱性で、低い権限を持つユーザーが、任意の権限を持つユーザー (Admin を含む) の設定を取得・変更・削除できるようになります。この結果、不正アクセスや不正なデータ操作が発生します。
  • CVE-2023-38054 (CVSS=9.9): GET, PUT, DELETE /customers/{customerId} における BOLA 脆弱性で、低い権限を持つユーザーが、低い権限を持つユーザー (Customer) を取得・変更・削除できるようになります。この結果、不正アクセスや不正なデータ操作が発生します。
  • CVE-2023-38055 (CVSS=9.9): GET, PUT, DELETE /services/{serviceId} における BOLA 脆弱性で、低い権限を持つユーザーが、任意の権限を持つユーザー (Admin を含む) のサービスを取得・変更・削除できるようになります。この結果、不正アクセスや不正なデータ操作が発生します。
  • CVE-2023-3285 (CVSS=7.7): POST /appointments における BOLA 脆弱性で、低い権限を持つユーザーがシステム内の任意のユーザー (Admin を含む) の予定を作成できるようになります。これにより、不正なデータ操作が発生します。
  • CVE-2023-3286 (CVSS=7.7): POST /secretaries における BOLA 脆弱性で、低い権限を持つユーザーがシステム内に低い権限を持つユーザー (Secretary) を作成できるようになります。これにより、不正なデータ操作が発生します。
  • CVE-2023-3288 (CVSS=7.7): POST /providers における BOLA 脆弱性で、低い権限を持つユーザーがシステム内でより権限の高いユーザー (Provider) を作成できるようになります。この結果、権限の昇格が発生します。
  • CVE-2023-3289 (CVSS=7.7): POST /services における BOLA 脆弱性で、権限の低いユーザーがシステム内の任意のユーザー (Admin を含む) のサービスを作成できるようになります。これにより、不正なデータ操作が発生します。
  • CVE-2023-38047 (CVSS=8.5): GET, PUT, DELETE /categories/{categoryId} における BOLA 脆弱性で、権限の低いユーザーが任意のユーザー (Admin を含む) のカテゴリーを取得・変更・削除できるようになります。この結果、不正アクセスや不正なデータ操作が発生します。
  • CVE-2023-3290 (CVSS=5): POST /customers における BOLA 脆弱性で、低い権限を持つユーザーがシステム内に低い権限を持つユーザー (Customer) を作成できるようになります。これにより、不正なデータ操作が発生します。

CVE-2023-38049

私たちが特定した脆弱性の根底にある問題を解説するために、CVE-2023-38049 を例に挙げて考えてみましょう。Secretary ロールを持つユーザーは、この脆弱性を悪用して任意のユーザーの予定を変更可能です。公式文書によると、Secretary ロールは、自身が割り当てられたプロバイダーに対してのみ、組織的なタスクを実行することが想定されています。

とくに、悪意のある Secretary は API パス /appointments/{appointmentId} 上で GETPUTDELETE 処理を行い、ほかのユーザーの予定を変更することができます。Secretary はユーザー インターフェイスからであればこれらの処理を実行できない点に注意が重要です。これらの処理が可能なのは API 呼び出し経由のみです。この結果、API と UI の動作に矛盾が生じます。

私たちは Admin ユーザーを 1 つ作成し、これを使って appointment_id1 である予定を作成しました。図 1 は、GET/appointments/1 リクエストへの応答を示しています。この応答には次のような情報が含まれます。

  • 予定の ID
  • 開始時間と終了時間
  • 場所
  • Customer
  • Provider
  • サービス
  • ハッシュ

このデータは機微なので、アクセスは会議を作成したユーザーに限られるべきです。

図 1. Admin の予定データ

次に、権限の低い Secretary ユーザーを使い、脆弱なエンドポイントを通じて、PUT /appointments/{appointmentId} をリクエストして Admin ユーザーが作成した予定を操作しました。図 2 は、Secretary ユーザーが送信した HTTP リクエストを示しています。

API テスト ツールで PUT リクエストを表示するソフトウェア インターフェイスのスクリーンショット。このリクエストには、予定日時、場所、Customer の詳細などのさまざまなパラメーターが JSON 形式で含まれており、下部に応答コード 200 OK が表示されています。
図 2. 権限の低いユーザーが Admin の予定を操作しているところ

脆弱性の影響

図 3 は、開始時刻、終了時刻、場所、Provider ID と Customer の ID が別のものになるように予定が変更された様子を表しています。こうした変更があったにもかかわらず、予定のハッシュは変更されておらず、元の予定が変更されていないという誤った印象を与えています。

図 3. 操作された「新規の」予定

開示プロセス

  • 2023-08-23: Unit 42 が Easy!Appointments 管理者に対し電子メールで脆弱性を報告
  • 2023-10-09: Easy!Appointments のメンテナーが脆弱性を確認
  • 2024-04-24: Unit 42 リサーチャーがパッチ公開タイムラインの問い合わせのためメンテナーにフォローアップ メールを送信
  • 2024-05-06: 15 件の CVE が予約される
  • 2024-05-14: Easy!Appointments が全件の脆弱性を修正した 1.5.0-alpha.1 (develop) をリリース
  • 2024-07-01: Easy!Appointments が全件の脆弱性を修正した 1.5.0-beta.1 (develop) をリリース
  • 2024-07-07: Easy!Appointments が全件の脆弱性を修正した 1.5.0 (production) をリリース

結論

API 利用の急増とともに、API の脆弱性、とくに BOLA 脆弱性が広く見られるようになってきています。本稿では、Unit 42 リサーチャーが Easy!Appointments に発見した 15 件の BOLA 脆弱性について詳しく説明しましたが、この発見にさいしては AI を活用した新たな自動化手法が使われました。これらの脆弱性は悪用が容易で潜在的影響が大きいため、影響を受ける組織はできるだけ速やかに修正済みバージョンに更新することをお勧めします。

Unit 42 のリサーチャーは、オープンソース ソフトウェアの堅牢化と技術革新に精力的に取り組むことにより、新たな脆弱性をより効率的に、より効果的に発見しています。パロアルトネットワークスのお客様は、弊社の最新の研究結果と洞察によってより適切に保護されています。

ASM モジュールが有効な Cortex XpanseCortex XSIAM をお使いのお客様はすべてのインターネットに露出した Easy!Appointments のインスタンスと未知の安全でないインスタンスをターゲット アタック サーフェス ルールを通じて検出できます。

侵害の懸念があり弊社にインシデントレスポンスに関するご相談をなさりたい場合は、こちらの問い合わせフォームからご連絡いただくか、infojapan@paloaltonetworks.com まで電子メールにてご連絡いただくか、下記の電話番号までお問い合わせください(ご相談は弊社製品のお客様には限定されません)。

  • 北米フリーダイヤル: 866.486.4842 (866.4.UNIT42)
  • EMEA: +31.20.299.3130
  • APAC: +65.6983.8730
  • 日本: (+81) 50-1790-0200
Enlarged Image