今回は「OWASP API Security TOP 10」の「API5:2019 Broken Function Level Authorization」について解説します。
まず、OWASPではBroken Function Level Authorizationについて英語では以下のような概要で説明しています。
Complex access control policies with different hierarchies, groups, and roles, and an unclear separation between administrative and regular functions, tend to lead to authorization flaws. By exploiting these issues, attackers gain access to other users’ resources and/or administrative functions.
グループやロールを適用する際のコントロールの不備により認可が適切に機能しなく、権限を超えたアクセスが可能になり、一般ユーザーが管理者権限などの操作ができてしますような脆弱性を指します。
ユーザーがグループやロールに所属していることが確実に検証され、そのグループやロールに割り当てられている権限以外は実行でないことが確実でなければなりません。
脆弱性診断で検出されるものにはユーザーが所属しているグループやロールが認識されていて、そのグループやロールのメンバーがアクセスするAPIへアクセスさせているのですが、悪意のあるユーザーがそのAPIのアクセス先を変えることでアクセスできてしまうケースがあります。
具体的な例をあげて解説した方がわかりやすいと思いますので簡単な例で解説します。
/user/item/listというAPIがあったとします。このAPIはユーザーが所有しているアイテム一覧を表示する機能を提供していますが、悪意のあるユーザーが/admin/item/listのパスを試してみたら管理者権限を持たないユーザーIDで管理者が参照できるアイテムにすべてアクセスできるようになります。
通常のアクセスであれば管理者以外のユーザーが参照しないAPIなのですが、ユーザーが推測してそのアクセス先を変更することでアクセスでき、さらにアクセスした時にユーザーが属しているグループ、ロールを確認せずにアクセスさせているため、権限を超えたアクセスができてしまいます。
グループ/ロールの検証不備はなりすましが容易になり、情報漏洩の脅威が発生します。開発段階でしっかりとグループやロールを定義し、適切に検証を行うことが重要になります。
Broken Function Level Authorizationの脆弱性が発生しないようにアプリケーション上の制御が存在し、回避できない状態になっているか確認しましょう!