【ぼーら】

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

公開:
💡 他人の引き出しを勝手に開けられる錠前の欠陥
📌 このページのポイント
BOLA(壊れたオブジェクトレベル認可) 正常(認可あり) ユーザーA ID: 101 GET /orders/101 APIサーバー 権限チェック ✓ 注文 #101 (自分のデータ) BOLA(認可欠陥) 攻撃者 ID: 999 GET /orders/102 (他人のID) APIサーバー 権限チェック ✗ 注文 #102 (他人のデータ) ! OWASP API Security Top10 #1 最も多く発生 する脆弱性 = IDOR とも呼ぶ 対策 リクエストごとに「このリソースはあなたのものか?」をサーバー側で必ず確認する
BOLAのイメージ(認可欠陥と正常時の比較)
ひよこ ひよこ
BOLAって何が「壊れてる」の?
ペンギン先生 ペンギン先生
アクセス許可の確認が壊れているんだよ。APIが「このIDのデータを取得して」というリクエストを受けたとき、「そのIDはあなたのものか?」を確かめずに返してしまう状態だよ。
ひよこ ひよこ
具体的にどんな攻撃が起きるの?
ペンギン先生 ペンギン先生
たとえば注文APIで `GET /orders/1001` を叩いたら自分の注文が返ってきたとして、`1002` に変えたら他人の注文が見えてしまうケースだよ。数字を1つ変えるだけで個人情報が漏れるんだ。
ひよこ ひよこ
IDORっていう言葉も聞いたことあるんだけど同じもの?
ペンギン先生 ペンギン先生
実質同じ概念だよ。IDOR(Insecure Direct Object Reference)はWebアプリ全般の文脈で使われる古い名称で、BOLAはOWASPAPIセキュリティ向けに整理した名称なんだ。
ひよこ ひよこ
どうすれば防げるの?
ペンギン先生 ペンギン先生
APIがリクエストを受け取るたびに、「リクエスト元のユーザーはこのオブジェクトにアクセスする権限を持つか?」をサーバー側で必ず確認することだよ。IDを推測されにくいUUIDにすることも対策の一つだね。
ひよこ ひよこ
なぜTop10の第1位になってるの?
ペンギン先生 ペンギン先生
実装が複雑なAPIほど見落としやすく、しかも攻撃が簡単だからだよ。ツールなしでも数字を変えるだけで試せてしまうから、攻撃者にとってコスパが良いんだ。だから最も頻発する脆弱性として1位なんだよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「BOLA」って出てきたら「APIが他人のデータを見せてしまう欠陥」と思えればだいたいOK!
📖 おまけ:英語の意味
「Broken Object Level Authorization」 = 壊れたオブジェクトレベル認可
💬 オブジェクト(リソース)レベルの認可(Authorization)が壊れている(Broken)状態を指すよ
← 用語集にもどる