San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
閉じる
プライバシー設定
ウェブサイト運営に必要なCookieや類似技術を使用しています。追加のCookieは貴社の同意がある場合のみ利用されます。同意は「Agree」をクリックすることでいただけます。どのデータが収集され、どのようにパートナーと共有されているかの詳細は、Cookieポリシープライバシーポリシーをご確認ください。
Cookieは、貴社デバイスの特性や、IPアドレス、閲覧履歴、位置情報、固有識別子などの特定の個人情報を取得、解析、保存するために使用されます。これらのデータは様々な目的で利用されます。分析Cookieによりパフォーマンスを評価し、オンライン体験やキャンペーンの効果向上に役立てます。パーソナライズCookieは、利用状況に応じた情報やサポートを通じ、貴社専用の体験を提供します。広告Cookieは、第三者が貴社のデータをもとにオーディエンスリストを作成し、ソーシャルメディアやネット上でのターゲット広告に使用します。貴社は各ページ下部のリンクから、いつでも同意の許可、拒否、または撤回が可能です。
ご送信ありがとうございます。内容を受け付けました。
申し訳ありません。フォーム送信時にエラーが発生しました。
/
/
API Security, OWASP, Attacks, Vulnerabilities

Broken Function Level Authorization

はじめに

API5:Broken Function Level Authorization

脅威の要因/攻撃経路セキュリティ上の弱点影響
この脆弱性は、利用者が自分のアカウントのプロパティを編集できることで、低い権限から高い権限へ昇格させたり、認証されていない利用者でも正当なリクエストが可能になる点に着目しています。この種の脆弱性は見逃されやすいものの、APIエンドポイントの予測可能な性質により、比較的発見しやすい傾向にあります。例えば、さまざまなHTTPメソッドを試す、またはURL内の文字列を置換する(例:/employees を /managers に)方法があります。 現代のアプリでは、利用者や役割の階層が複雑であるため、各利用者タイプに応じた適切なアクセス制御の実装が難しく、テストで見逃されることがよくあります。これらの役割はしばしばアプリ内や副次的なシステムで設定されますが、場合によってはアクセスレベルがハードコードされていることもあります。 脆弱性の影響はほぼ常に大きく、利用者がアクセスすべきでない機能へ容易に到達できるため、情報漏洩や無償サービスの不正取得、場合によっては他利用者のパスワードリセットなどにより全アカウントの乗っ取りに至る可能性があります。
Broken Function Level Authorization

Broken Function Level Authorizationとは?

概要から、この脆弱性が非常に複雑かつ多様なケースで存在することがお分かりかもしれません。現在、OWASP Top 10のランキングでどこに位置するか確認してください。人は本質的に予測可能で、エンドポイントの配置にも一定のパターンがあります。例えば、特権の高いエンドポイントが同じ相対パス上に配置されると、利用者が推測しやすくなります。しかし、それだけでは脆弱性になりません。低い権限のユーザとしてもエンドポイントにアクセスできる必要があります。このアクセスは、指定されたHTTPメソッド(例:POST)を実行することで生じる場合もあれば、開発者が意図的または非意図的に有効にした他のメソッド(例:DELETE)で生じる場合もあります。さらに、エンドポイントが予測しやすい場合(例:/books?id=0 から /books/all が推測され、アクセスすべきでない書籍が表示される可能性がある)に、問題が深刻化することがあります。

Broken Function Level Authorization example

攻撃シナリオの例

最初の例では、フランチャイズ保有者とフランチャイズを悪用しようとする企業という2種類のアカウントが存在する対象を取り上げます。どちらも同じURLでログインしますが、フランチャイズ保有者のアカウントははるかに高価です。しかし、アカウント設定画面で保存を行うと、隠されたパラメータ「Account type」が存在し、「exploitant」から「franchise_holder」に変更できることに気付きます。これにより、低価格のアカウントを取得した後、後から自分で高価格のアカウントに切り替えることが可能となります。

例:

POST /api/saveSettings.php
[
    {
        "Name": "677",
        "...": "AAAAA...AAAA",
        "AccountType":"exploitant"
    }
]

このリクエストボディを以下のように変更します。

POST /api/saveSettings.php

[
    {
        "Name": "677",
        "...": "AAAAA...AAAA",
        "AccountType":"franchise_holder"
    }
]

このリクエストを送信することで、利用者自身がアカウントをより高価なプランへアップグレードできるようになります。

2つ目の例として、利用者がドキュメントを閲覧しようとするケースがありますが、通常は自分のドキュメントのみが表示されます。しかし、自分のドキュメントをエクスポートすると、URL /api/documents/export が返されます。このURLは正しく自分のドキュメントのみを返しますが、単純に推測することで、全ドキュメントを返す /api/documents/export/all というURLが存在することが分かります。

GET /api/documents

上記は以下の応答を返します。

[
    {
        "id": "1",
        "content": "AAAAA...AAAA",
        "creationDate":"10-10-10"
    },
    {
        "id": "4",
        "content": "AAAAA...AAAA",
        "creationDate":"10-10-10"
    }
]

通常、利用者は自分のドキュメントしか閲覧できませんが、エクスポート時にパスを変更することで、全ドキュメントを取得できることに気付くのです。

GET /api/documents/export

は先述の結果と同じ内容を返しますが、以下のリクエストでは:

GET /api/documents/export/all

全てのドキュメントがエクスポートされます。

過剰なデータ露出に対する予防策

認証と認可のモジュールを本体コードから分離し、必要な場所で容易に実装できるようにするのが望ましいです。初期状態では全てのアクセスを拒否することで安全性を高めることができ、不要なトラフィックをブロックする方法もありますが、その代わりに攻撃経路の一部を見逃すリスクが生じます。

また、アプリのロジックや各ユーザレベルを考慮しながら、認可モジュールの定期的かつ徹底したテストと分析を実施する必要があります。

さらに、より安全性を高めるため、前述の認可モジュールを実装したマスター管理者クラスを導入する方法もあります。このモジュールを他の管理機能が継承することで、低権限の利用者による管理機能の実行を防ぐことができます。

最後に、以下の2点を常に念頭に置く必要があります:

  • 利用者のグループ
  • 利用者の認可レベル

これらの条件を確認し、管理機能へは管理者のみがアクセスできることを確実にしなければなりません。

検証のため、APIの予測可能な構造を活かしてテスト自動化を部分的に導入するのが賢明です。例えば、全てのAPIエンドポイントにOPTIONSメソッドを実行し、不正なメソッドが使えないかを確認するテストが考えられます。また、利用者の役割やグループのチェックを自動化することも可能ですが、そのためには各役割とグループのアクセスレベルを明確に定義する必要があります。

APIが返す全パラメータを定期的にインデックスしてテストし、利用者が編集してはならないプロパティに変更が加えられないことを確認する必要があります。

結論

この脆弱性の悪用方法は大きく3種類に分類できます。URLや特定のパラメータ、さらにはHTTPメソッドの操作によるものです。この脆弱性の結果はほぼ必ず深刻で、APIレベルでの垂直方向の権限昇格に繋がります。これらの要素を踏まえ、一つ一つの問題を見落とさず、本番環境に影響が出ないよう十分注意する必要があります。

部分的な自動化による検出は有用ですが、ロボットが全てのURLを推測するのは難しいため、手動テストも組み合わせることが大切です。テスト自動化は、管理機能へのアクセスを許すAPIエンドポイントが抜け落ちていないか、ディレクトリのブルートフォースを行う際に大いに役立ちます。ウェブAPIを守る最善の方法 - Wallarm。

FAQ

参考資料

最新情報を購読

更新日:
February 25, 2025
学習目標
最新情報を購読
購読
関連トピック