La regola prima di tutto: solo sul vostro, solo con permesso
Cosa cercate, in una frase
State cercando un punto dell'applicazione in cui un dato viene servito in base a un identificativo che l'utente può vedere e modificare — un numero nell'indirizzo, un campo nascosto in un modulo, un valore in una richiesta — senza che il server controlli che quel dato appartenga davvero a chi lo chiede. Se lo trovate, avete trovato un IDOR.
| Punto dell'app | Esempio di indirizzo sospetto |
|---|---|
| Dettaglio di un ordine | /ordini/1042 |
| Download di una fattura o di un documento | /documenti/scarica?id=580 |
| Profilo o dati anagrafici | /utenti/317/profilo |
| Messaggio o ticket di assistenza | /ticket/9021 |
| Campo nascosto in un modulo | un input di tipo hidden con dentro un id cliente |
La regola pratica: ogni volta che vedete un numero che identifica una cosa vostra, chiedetevi cosa succede se al suo posto ci fosse il numero di una cosa di qualcun altro.
La verifica, passo per passo
- 01
Create due account di prova
Chiamateli Anna e Bruno. Devono essere due clienti distinti, come due utenti reali qualsiasi. Fate creare a ciascuno un dato proprio: un ordine, un documento, un ticket.
- 02
Da Anna, annotate l'identificativo del suo oggetto
Aprite il dettaglio dell'ordine di Anna e guardate l'indirizzo o la richiesta di rete (negli strumenti per sviluppatori del browser, scheda Rete). Segnate il numero che identifica quell'ordine, per esempio 1042.
- 03
Passate nei panni di Bruno
Fate il logout da Anna e il login come Bruno, in modo che il browser usi la sessione di Bruno. Bruno non deve avere nulla a che fare con l'ordine 1042.
- 04
Da Bruno, chiedete l'oggetto di Anna
Nella sessione di Bruno, provate a raggiungere lo stesso indirizzo dell'ordine 1042. Potete farlo dal browser, oppure ripetere la richiesta di rete cambiando solo il numero.
- 05
Leggete l'esito
Se il server risponde con un rifiuto (tipicamente un codice 403 «vietato» o 404 «non trovato»), il controllo di autorizzazione c'è e funziona. Se invece Bruno vede l'ordine di Anna — con codice 200 «ok» e i dati in chiaro — avete confermato un IDOR.
Gli errori che rendono la verifica inutile
- Provare con lo stesso account: se Anna apre l'ordine di Anna, ovviamente funziona. Il difetto si vede solo passando da un utente all'altro.
- Fermarsi al fatto che il link non è cliccabile: un pulsante nascosto non è un permesso. Se l'indirizzo digitato a mano funziona, la porta è aperta.
- Controllare solo la pagina e non il download: spesso la pagina è protetta ma il link diretto al file no. Provate entrambi.
- Dimenticare i campi nascosti dei moduli: un id cliente in un campo hidden è modificabile esattamente come un numero nell'indirizzo.
Se lo trovate: cosa dire a chi deve sistemarlo
La correzione non sta nel nascondere meglio l'identificativo, e nemmeno nel renderlo un codice lungo e casuale — che riduce la probabilità di indovinarlo ma non chiude la porta. La correzione è una sola: il server, a ogni richiesta, deve verificare che l'oggetto richiesto appartenga all'utente che lo chiede, prima di restituirlo. È un controllo di autorizzazione lato server, punto per punto.