オブジェクトレベルの認可の不備(Broken Object Level Authorization、BOLA)は、アプリケーションや API が、ユーザーに特定データへのアクセス権限があるかを正しく検証できない脆弱性です。
アプリケーションや API の不具合により、攻撃者は認可チェックを迂回し、オブジェクト識別子(ユーザー ID や注文 ID など)を操作・反復して、機密情報にアクセスできることがあります。
脆弱性は、当初のアプリケーションのデプロイ時を含め、いつでも発生します。認証・認可ポリシーの変更やアップグレードでも、こうした不具合が入り込むことがあります。
BOLA の脆弱性は、アカウント乗っ取りと同じくらい危険です。BOLA を突かれると、攻撃者は本来所有すべきでないデータにアクセスしたり、変更したりできます。
Cloudflare は、BOLA を突く攻撃に共通する 2 つの兆候、パラメーター汚染 と 列挙 を検出すると、エンドポイントに BOLA リスクのラベルを付けます。
Cloudflare は、各セッションが各エンドポイントとどうやり取りするかを追跡し、そのエンドポイントのベースラインより、はるかに多くの一意のデータポイントを成功裏に要求するセッションにフラグを付けます。
列挙の例
エンドポイント: GET /api/v1/users/{userId}/credit-cards
- 通常の動作: ユーザーは自分の
userIdだけを使ってクレジットカードを要求します。 - 攻撃時の動作: 攻撃者は、ほかの方法で得た
userIdを総当たりで反復し、セッションあたり数百のuserIdを要求します。 - 結果: このエンドポイントのオリジン認可ポリシーが壊れていると、攻撃者は要求したすべてのユーザーアカウントのクレジットカード情報を入手します。
Cloudflare は、想定される場所(パス、クエリ文字列、ヘッダー、Cookie)にあるパラメーター値が、想定外の似た場所にも重複して含まれる成功リクエストを検出します。この挙動は、攻撃者が API の認可システムを混乱させ、セキュリティ制御を迂回しようとしている兆候になることがあります。
パラメーター汚染の例
エンドポイント: GET /api/v1/orders/{orderId}
- 通常の動作:
orderIdをパス変数で送ります。例:GET /api/v1/orders/12345 - 攻撃時の動作:
orderIdをクエリパラメーターとしても送ります。クエリパラメーターで注文を探し、認可チェックがない古い未文書化コードが動きます:GET /api/v1/orders/12345?orderId=67890 - 結果: 攻撃者は、偽の注文や自分が所有する注文(
12345)を渡すことで、古い未文書化コードを動かし、所有していない注文(67890)にアクセスできます。
API Shield は、訪問者のトラフィックパターンを学習し、特定オブジェクトへの異常なアクセスを識別して BOLA 攻撃を検出します。影響を受けたエンドポイントには、次の リスクラベル が自動で付きます。
cf-risk-bola-enumeration: ユーザーセッションごとに要求される一意の要素数が大きく異なり、かつ成功レスポンスが発生しているエンドポイントに自動で付きます。cf-risk-bola-pollution: API スキーマで想定される場所とは異なり、リクエストの複数箇所にパラメーターが見つかり、かつ成功レスポンスが発生しているエンドポイントに自動で付きます。
API エンドポイントにこれらのラベルが付いている場合は、開発チームと認可ポリシーを確認し、認可の不具合がないかを調べてください。攻撃の到達範囲と影響を確認するため、攻撃者の識別子を含むレポートを Cloudflare に依頼することもできます。
BOLA 攻撃の情報は、Security Overview、Security Analytics、エンドポイントの詳細 で確認できます。
エンドポイントで BOLA の脆弱性が検出された場合は、Cloudflare ダッシュボードで攻撃の概要と緩和の提案を確認できます。
-
Cloudflare ダッシュボードで Security ページを開きます。
Overview を開く ↗ -
API abuse または All suggestions を開きます。
-
攻撃の種類に応じて、Review traffic from potential BOLA enumeration attack または Review traffic from potential parameter pollution attack を選択し、攻撃の詳細と推奨アクションを確認します。
-
View all affected endpoints を選択するか、特定エンドポイントの View details を選択し、Web Assets で不審なセッションを確認します。
Cloudflare は、列挙とパラメーター汚染の両方についてセッションリクエストを評価し、リスクのあるエンドポイントと、攻撃が検出された異常セッション数の一覧を示します。推奨アクションに従い、BOLA の脆弱性に対処して、今後の攻撃を防いでください。
ゾーンのトラフィックプロファイルと、列挙またはパラメーター汚染攻撃に関連する不審リクエストの分析は、Cloudflare ダッシュボードで確認できます。
Analytics を開く ↗ゾーンで検出された攻撃の種類に応じてリクエストをフィルターします。攻撃で見つかったハッシュ済みセッション ID と、対応する BOLA 脆弱性のリスクラベルを含め、過去 7 日間のリクエスト活動を分析できます。このフィルターには、攻撃が疑われるセッションからのトラフィックがすべて含まれるため、ゾーンに対するほかの操作も評価できます。
特定のエンドポイントではフィルターしません。
管理対象 API エンドポイント、攻撃対象のパスと値、送信元 IP、送信元ユーザーエージェント、送信元フィンガープリントの上位統計と詳細を確認します。
一意のオブジェクト要求の急増や、想定外のパラメーター位置など、通常と異なるパターンがないかをトラフィックプロファイルで確認します。
Web Assets でエンドポイントの詳細を展開すると、そのエンドポイント上の不審セッションの活動を確認できます。列挙攻撃とパラメーター汚染攻撃の両方の詳細が含まれます。
Web assets を開く ↗Security overview で View attack を選択し、関連する IP アドレスと JA4 フィンガープリント(リクエストを出すソフトウェアの識別に使う TLS クライアントフィンガープリント)付きの影響セッションを確認します。
すべてのセッション、または特定のセッションについて、IP アドレスと JA4 フィンガープリントを含む .csv ファイルをエクスポートできます。
詳細には、影響を受けたパラメーター、攻撃に関与したセッション数、ベースラインからの乖離の大きさが示されます。
パラメーターへの不正アクセスが起きていた場合は、アプリケーション、ユーザー、データへの影響を検討してください。ベストプラクティスとして、アプリケーションと API の開発者と相談し、不正セッションの IP アドレスと JA4 フィンガープリントを API オリジンログで確認して、不正アクセスを裏付けてください。
攻撃データは Security Analytics で確認できます。
Analytics を開く ↗管理対象エンドポイントは、過去 7 日間のリクエスト活動で自動的にフィルターされます。攻撃の詳細で見つかった不審な IP アドレスとフィンガープリントでもフィルターできます。
オブジェクトレベルの認可の不備(BOLA)の脆弱性検出は、Enterprise のお客様だけが利用できます。この製品に興味のある Enterprise のお客様は、アカウントチームにお問い合わせください。