Shikata Ga Nai

Private? There is no such things.

パラメータによるアクセス制御の落とし穴とその診断方法

Hello there, ('ω')ノ

パラメータベースアクセス制御とは?

一部のアプリケーションでは、ユーザーの権限情報を以下の場所に保存して管理します:

  • 隠しフィールド
  • Cookie
  • URLパラメータ(クエリストリング)

具体例:URLパラメータで権限管理しているケース

次のようなURLが使われている場合があります:

https://insecure-website.com/login/home.jsp?admin=true
https://insecure-website.com/login/home.jsp?role=1

この値を変更するだけで、一般ユーザーでも管理者権限を得られることがあります。


なぜ危険なのか?

  • ユーザーが自由に編集可能
  • サーバー側で本当の認証確認をしていない
  • ブラウザの開発者ツールやBurp Suiteなどで簡単に変更可能

診断手順と見つけ方

1. ページのURLパラメータを観察

  • admin=truerole=1 など、権限に関係しそうなものが無いか確認。

2. パラメータを書き換えて試す

  • role=0role=1
  • admin=falseadmin=true

3. Cookieやフォームのhiddenフィールドも確認

  • ブラウザ開発者ツール → Application タブを使う。

4. 変更後の挙動を確認

  • 管理者ページへのリンクが現れたり、制限されていた機能が使えるようになれば脆弱性確定。

まとめ:安全なアクセス制御のポイント

  • サーバー側でユーザー情報を確認すること!

    • クライアント側の情報は信用しない。
  • パラメータやCookieに権限情報を入れない
  • セッション情報で正しく管理する

    • 例:サーバー側でセッションIDと権限をひも付ける。

この方法を押さえておけば、パラメータベースアクセス制御の脆弱性を効率よく発見できます!

Best regards, (^^ゞ