Shikata Ga Nai

Private? There is no such things.

LAB: ユーザーIDが予測困難なパラメータで制御されている場合の水平的権限昇格

Hello there, ('ω')ノ

🎯 目的

このラボでは、ユーザーアカウントページに水平的権限昇格の脆弱性が存在し、ユーザーがGUID(Globally Unique Identifier)で識別されています。攻撃者は、他のユーザーのGUIDを取得することで、そのユーザーのアカウント情報に不正アクセスできます。


🛠️ 手順

1. カルロスのブログ投稿を見つける

  • ラボのホームページにアクセスし、カルロス(carlos)によるブログ投稿を探します。

2. カルロスのユーザーID(GUID)を取得する

  • カルロスの名前をクリックすると、URLに彼のユーザーID(GUID)が表示されます。
  • 例: https://<lab-id>.web-security-academy.net/blogs?userId=2603c122-a7b8-4bda-b0eb-780b8fbc5016
  • このGUID(例では 2603c122-a7b8-4bda-b0eb-780b8fbc5016)をメモします。

3. 自分のアカウントにログインする

  • 提供された資格情報を使用してログインします。

    • ユーザー名: wiener
    • パスワード: peter

4. カルロスのアカウントページにアクセスする

  • 自分のアカウントページのURLにアクセスします。

    • 例: https://<lab-id>.web-security-academy.net/my-account?id=<your-GUID>
  • URLの id パラメータの値を、先ほど取得したカルロスのGUIDに置き換えます。

    • 例: https://<lab-id>.web-security-academy.net/my-account?id=2603c122-a7b8-4bda-b0eb-780b8fbc5016

5. カルロスのAPIキーを取得する

  • カルロスのアカウントページにアクセスすると、彼のAPIキーが表示されます。
  • このAPIキーをコピーします。

6. ソリューションを提出する

  • ラボの「Submit solution」セクションに移動し、コピーしたAPIキーを貼り付けて提出します。

💡 ポイント

  • GUIDは推測が困難ですが、アプリケーション内で他のユーザーのGUIDが露出している場合、攻撃者はそれを利用して不正アクセスできます。
  • このような脆弱性は、Insecure Direct Object Reference(IDOR) として知られています。
  • アクセス制御は、ユーザーがリクエストするリソースに対して適切な権限を持っているかをサーバー側で検証する必要があります。

🧠 学習のまとめ

  • 水平的権限昇格は、同じ権限レベルのユーザーが他のユーザーのデータや機能に不正アクセスすることを指します。
  • IDORは、ユーザーが直接リソースを指定できてしまう脆弱性であり、適切なアクセス制御が実装されていない場合に発生します。
  • アプリケーションは、ユーザーがアクセスを試みるリソースに対して、サーバー側で厳密な所有者チェックを行う必要があります。

Best regards, (^^ゞ