脆弱性を見つけよう アクセス制御の不備編

May 29, 2017


第8回目はアクセス制御の不備による脆弱性を取り上げます。

アクセス制御とは、特定のユーザーからのリソース(情報や機能)へのアクセスを許可または拒否することです。Webアプリケーションではリクエストに付与された識別情報(番号やロール名、トークンなど)をもとにアクセス制御を行ないます。その制御に不備があると、権限のない攻撃者から不正にアクセスされてしまいます。

検出方法

アクセス制御の不備を見つけるには以下の手順でサイトの挙動を確認します。

  1. アクセス制御が行なわれているリソースがあるか
  2. 権限のある識別情報を取得できるか、または推測できるか
  3. 識別情報を付け替えて本来権限のないリソースにアクセスできるか

今回も引き続き、OWASP BWAの「WackoPicko」を対象に調査します。WackoPickoは架空の写真共有サービスです。アカウントを作成してログインすると、他のユーザーがアップロードした写真を閲覧できます。

図1はユーザー「bob」がアップロードした写真の一覧ページ /view.php です。このページではURLに付与されたパラメータ userid でユーザーを識別しているようです。ユーザー「bob」のIDは 2 です。

図1. ユーザー「bob」の写真一覧ページ

WackoPickoにログインしていない状態で写真一覧ページにアクセスすると、図2のようにログインページにリダイレクトされました。このページではアクセス制御が行なわれており、ログインした状態でなければアクセスできないようです。他のユーザーがアップロードした写真を見るにはログインしなければなりません。

図2. ログインしていない状態でアクセスした際の挙動

他の機能も見ていくと、トップページのリンクから写真一覧のサンプルページ /sample.php がありました。このページはログインしていない状態でもアクセスできます。

図3. 写真のサンプルページ

サンプルページのURLにもパラメータ userid が付与されています。サンプルユーザーのIDは 1 です。このIDを操作することで特定のユーザーがアップロードした写真を表示できそうです。IDを 2 に付け替えてアクセスすると、ユーザー「bob」の写真が表示されました。

図4. サンプルページに表示されたユーザー「bob」の写真

ログインした状態でないと見れないはずの写真をログインしていない状態で見れました。アクセス制御を回避して本来権限のない情報にアクセスできる状態です。さらに、IDは連番であると推測し 345 とインクリメントすることで、他のユーザーの写真も見れそうです。

WackoPickoでは誰でもアカウントを作成でき、ログインさえすれば他のユーザーがアップロードした全ての写真を閲覧できます。そのため、この脆弱性による被害の影響は少ないでしょう。しかし、許可がないと利用できないシステムや、写真の公開範囲を設定できるサービスだった場合、影響は大きかったでしょう。

今回はパラメータの値によるアクセス制御を例に説明しました。しかし、URLやヘッダの値によりアクセス制御が行なわれるケースもあります。そのようなケースでの調査方法はCasey Ellis氏のブログが参考になります。

アクセス制御の不備を見つけるには、サイト上の機能や権限の種類をしっかり把握することが大切です。


計8回にわたる連載もこれで終わりです。これまでに取り上げた脆弱性はほんの一部にすぎません。今後もOWASP BWAを使うなどして、見つけられる脆弱性の種類を増やしてください。また、セキュリティ診断に関する勉強会やコミュニティに参加することで、多くのノウハウを学べます。積極的に参加してください。

倫理的なハッカーになれるといいですね。健闘を祈ります。