認可の不備
BOLAとアクセス制御の不備
「認可の不備」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
認証と認可
認証はあなたが誰であるかを証明します。認可はあなたが何をしてよいかを決定します。
認可の不備があると、システムによってユーザーが本来許可されていない操作をしたり、情報を見たりできてしまいます。
BOLAとは
BOLAはBroken Object Level Authorizationの略です。
これはAPIにおける最も重大なリスクです。APIはログイン済みであることは確認しますが、要求された特定のオブジェクトが実際にそのユーザーのものかどうかを確認しません。
BOLAの例
あなたのアカウントがユーザー100だとします。
GET /api/users/100/ordersIDを変更してもサーバーが応答するなら、他人の注文を読み取れてしまいます。これがBOLAです。
BOLAが発生する理由
開発者は、リクエスト内のIDを信頼してしまうことがあります。
ログイン中のユーザーがそのオブジェクトを実際に所有しているかの確認を忘れてしまうのです。対策は、すべてのリクエストで所有者を確認することです。
機能レベルの認可
もう1つの脆弱性がBFLA(Broken Function Level Authorization)です。
エンドポイントがユーザーのロールを確認しないため、一般ユーザーが管理者専用の操作を呼び出して実行できてしまいます。
BFLAの例
管理者用のルートを考えてみましょう。
DELETE /api/admin/users/55一般ユーザーがこれを呼び出して成功するなら、APIはロールベースのアクセス制御を適用できていません。
マスアサインメント
APIによっては、リクエストのフィールドをレコードに無条件でマッピングします。
ユーザーがプロフィール更新にrole=adminのようなフィールドを追加すると、気付かれないまま自分の権限を昇格できる可能性があります。
サーバー側で確認する
ボタンやフィールドを非表示にする処理をクライアントに任せないでください。
攻撃者はUIを完全に迂回してリクエストを直接送信できるため、すべての認可判断はサーバーで適用する必要があります。
予測困難なIDを使う
連番のIDはBOLAを簡単に悪用できるようにします。
UUIDのようなランダムな識別子を使っても認可チェックの代わりにはなりませんが、次の番号を推測するだけの攻撃は防げます。
デフォルト拒否
安全なAPIはデフォルトで拒否します。
明示的なルールによって許可された場合にのみアクセスを認めます。これにより、チェックが抜けていてもデータを漏らすのではなく、アクセスを閉じた状態にできます。
認可をテストする
認可のバグは見つけにくいため、意図的にテストしてください。
自分のトークンを使って、別のユーザーのデータへのアクセスを試みます。成功した場合は、修正が必要な重大な脆弱性を発見したことになります。
クイックチェック
APIはログイン済みであることを確認しますが、IDを変更すると別のユーザーのレコードを返します。これはどの脆弱性ですか?
まとめ
認可の不備があると、ユーザーが本来アクセスできないものにアクセスできてしまいます。BOLA、BFLA、マスアサインメントに注意してください。
所有者とロールのチェックをサーバーで適用し、デフォルトで拒否し、認可を意図的にテストしてください。
よくある質問
「認可の不備」レッスンは無料ですか?
はい。「認可の不備」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「認可の不備」で何を学びますか?
BOLAとアクセス制御の不備 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「認可の不備」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。