【ぼーら】

BOLA(壊れたオブジェクトレベル認可) とは?

最終更新:
💡 ログイン済みでも、他人のデータは勝手に開けない

APIが、指定されたデータに対してその利用者がその操作を行えるかを適切に確認せず、不正な閲覧・変更・削除などを許すオブジェクト単位の認可の欠陥。

📌 このページのポイント
BOLA:データへの操作権限を確認Aさん:ログイン済みBさんの注文を読む要求権限を確認せず他人の注文が見える認可の欠陥操作権限を確認権限なし:拒否データを返さない所有・共有・役割などのルールで判断IDを知っていても、許可とは別だよ
所有者だけに注文の閲覧を許す架空の例。読み取りだけでなく変更・削除にも認可が必要。
ひよこ ひよこ
ログインしていれば、APIからデータを見てもいい?
ペンギン先生 ペンギン先生
ログインは本人確認で、認証だよ。その人が「この注文を読む」「この文書を削除する」といった操作を許されているかは、認可で確かめる。APIが個々のデータに対する権限を確認し損なうのがBOLAなんだ。
ひよこ ひよこ
どんな失敗が起きるの?
ペンギン先生 ペンギン先生
たとえば、自分の注文の番号を指定すると内容が返るAPIで、他人の注文番号を指定しても返ってしまうケースだよ。読み取りだけでなく、変更や削除の権限も確認が必要。IDは数字とは限らず、文字列やUUIDの場合もあるよ。
ひよこ ひよこ
IDORと同じ言葉?
ペンギン先生 ペンギン先生
とても近い問題を指すよ。IDORは、利用者が指定するIDなどを使って、権限のないデータへアクセスできる欠陥の呼び名。BOLAは、OWASPがAPIでのオブジェクト単位の認可の欠陥として整理している。OWASP API Security Top 10の2023年版ではAPI1に挙がっているよ。
ひよこ ひよこ
IDをUUIDにすれば、防げる?
ペンギン先生 ペンギン先生
推測を難しくする補助にはなるけれど、IDを知った人に権限があるとは限らないよ。サーバー側で「この人が、このデータへ、この操作を行えるか」を確認する。所有者だけでなく、共有設定や所属、役割など、サービスのルールに合わせるんだ。
ひよこ ひよこ
きちんと守れているか、どう確かめるの?
ペンギン先生 ペンギン先生
自分たちの検証環境で、権限が違う利用者とデータを用意し、許可される操作と拒否される操作を試そう。読み取りだけでなく、更新・削除・出力なども確認する。IDの形が変わっても権限のない操作が拒否されることを確かめるんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「BOLA」って出てきたら「APIが、個々のデータへの操作権限を正しく確認しない欠陥」と思えばだいたいOK!
📖 おまけ:英語の意味
「Broken Object Level Authorization」 = 壊れたオブジェクトレベル認可
💬 オブジェクト(リソース)レベルの認可(Authorization)が壊れている(Broken)状態を指すよ

参考資料

← 用語集にもどる