TryHackMe「IDOR(Insecure Direct Object Reference)」

# IDOR(Insecure Direct Object Reference)学習・報告用レポート

## 脆弱性概要 脆弱性名:IDOR(Insecure Direct Object Reference) 日本語:安全でない直接オブジェクト参照

IDORとは、WebアプリケーションやAPIがユーザーから指定されたIDや識別子を適切に認可(Authorization)確認せず処理してしまう脆弱性である。ユーザーがURLパラメータやAPIリクエスト内のIDを変更するだけで、本来アクセス権限を持たない他ユーザーの情報やリソースへアクセスできる可能性がある。

今回の検証では、顧客情報取得APIに対してIDパラメータを変更し、別ユーザー情報が取得可能であることを確認した。

## 対象機能 機能:顧客情報取得API

エンドポイント: GET /api/v1/customer?id={id}

パラメータ: id

用途: 指定された顧客IDに紐づくユーザー情報を取得する。

## 脆弱性確認手順 1. Firefox DevToolsのNetworkタブからAPI通信を確認。

2. 以下のリクエストを発見。

GET /api/v1/customer?id=1

3. レスポンスとしてユーザー情報が返却された。

{ "id":1, "username":"adam84", "email":"adam-84@fakemail.thm" }

4. Edit and Resend機能を使用し、idパラメータを変更。

変更前: id=1

変更後: id=3

5. リクエストを再送信。

6. 別ユーザーの情報が取得できることを確認。

## 脆弱性の原因 本来、サーバー側では以下の確認が必要。

Authentication(認証): 「このユーザーはログインしているか」

Authorization(認可): 「このユーザーは、このcustomer IDの情報を見る権限があるか」

しかし脆弱な実装では、IDの存在だけを確認し、ユーザーの権限確認を行わず情報を返却してしまう。

正常な処理: ユーザーA → customer id=3取得要求 → サーバー → ユーザーAに権限があるか確認 → 許可

脆弱な処理: ユーザーA → customer id=3取得要求 → サーバー → IDが存在するため情報返却

## 影響 攻撃者が自身のアカウントでログインした状態で、ID値を変更するだけで他ユーザー情報を取得できる可能性がある。

漏洩する可能性がある情報: ・氏名 ・メールアドレス ・住所 ・注文情報 ・アカウント情報 ・内部データ

取得だけではなく、編集・削除機能にも同様の問題がある場合、より重大な影響になる。

## 脆弱性分類 CWE: CWE-639(Authorization Bypass Through User-Controlled Key)

OWASP Top 10: A01: Broken Access Control(アクセス制御の不備)

## 技術的理解 IDORではAuthentication(認証)は正常に動作している場合が多い。

例: Cookie: session=xxxxx

ログイン済みユーザーとして認識される。

問題はAuthorization(認可)。

正常: ユーザーA → customer id=1取得 → サーバー → 権限確認 → 許可

脆弱: ユーザーA → customer id=3取得 → サーバー → IDだけ確認 → 情報返却

## 攻撃者が探すポイント IDORでは、ユーザーが変更可能なIDや識別子を探す。

URLパラメータ: /profile?id=100

/user?id=200

パスパラメータ: /api/user/100

JSON Body: { "user_id":100 }

API: GET /api/orders/5001

共通点: ユーザー側で変更可能な参照値が存在する。

## 対策 1. サーバー側で必ず認可チェックを実装する。

2. ユーザー入力されたIDを信用しない。

3. データ取得時に所有者確認を行う。

例: SELECT * FROM customer WHERE id = requested_id AND owner_id = logged_in_user_id;

4. UUIDなど推測困難なIDを利用する。

ただし、UUID化だけでは根本的対策にはならず、必ず認可処理が必要。

## 使用ツール Firefox Developer Tools: HTTPリクエスト確認、パラメータ変更、レスポンス確認。

Burp Suite: 実際のペネトレーションテストやBug Bountyで標準的に使用される。

主な機能: Proxy:通信を取得する HTTP History:過去の通信を見る Repeater:リクエストを編集して再送する Intruder:パラメータを大量テストする

## IDOR調査の基本手順 1. 通信を確認する。 2. APIやURL内のIDパラメータを探す。 3. ID値を変更する。 4. レスポンスの変化を見る。 5. 権限外の情報取得ができればIDORとして報告する。

## Bug Bounty報告例

タイトル: IDOR allows unauthorized access to customer information via customer ID parameter

概要: The customer API endpoint does not properly validate authorization when accessing customer records. By modifying the id parameter, an authenticated user can access other customers' information.

再現手順: 1. Normal userとしてログイン。 2. 以下へアクセス。 GET /api/v1/customer?id=1 3. idを変更。 GET /api/v1/customer?id=3 4. リクエスト送信。 5. 他ユーザー情報が返却されることを確認。

影響: 認証済みユーザーが権限のない顧客情報へアクセス可能になる。

修正案: リクエストされたcustomer IDに対して、ログインユーザーがアクセス権限を持つかサーバー側で確認する。

## 学習まとめ 今回の演習では、IDOR脆弱性の基本的な発見方法を学習した。

重要なのは、IDORは「ログインを突破する攻撃」ではなく、「正規ユーザーが本来許可されていないデータへアクセスできる問題」という点である。

攻撃者はCookieやパスワードを盗む必要はなく、自分の正規セッションを利用したままIDや参照値を変更することで脆弱性を発見する。

IDORはWebアプリケーション、API、Bug Bountyにおいて非常に重要な脆弱性であり、今後学習するHorizontal Privilege Escalation、API IDOR、Broken Access Controlの基礎となる。

一覧へ戻る