Una vulnerabilità IDOR (Insecure Direct Object Reference) è una tipologia di vulnerabilità che rientra nella macrocategoria delle vulnerabilità relative al Controllo degli Accessi. Consente ad un attaccante di aggirare alcuni controlli al fine di accedere in maniera non autorizzata a dati e/o sezioni riservate del servizio/applicazione.
L’impatto di una vulnerabilità di tipo IDOR è ovviamente variabile poiché dipende da quale controllo è stato aggirato. Per fare qualche esempio:
- Se il controllo aggirato riguarda l’accesso e l’utilizzo di una funzione amministrativa, questo potrebbe comportare la compromissione pressoché completa di un servizio/applicazione
- Nel caso in cui, invece, il controllo riguardasse l’accesso ma non la possibilità di modifica di dati di altri utenti, questo comporterebbe un rischio minore per il servizio/applicazione ma un rischio elevato concernente per i singoli utenti.
Non esistono vere e proprie tipologie d’attacco in quanto dipende specificatamente, come già detto, dal controllo scalvacato.
Restando nell’ottica dei due scenari descritti nella sezione relativa agli impatti, si possono portare due esempi:
- Supponiamo che il controllo consista nella possibilità d’aggirare il controllo del permesso amministrativo necessario alla creazione di un nuovo utente mediante una richiesta POST al seguente url “https://sitowebvulnerabile.com/admin/adduser”. La vulnerabilità IDOR consiste nell’aver facilmente identificato il percorso “adduser” e aver rilevato la mancanza di controllo degli accessi: la gravità della vulnerabilità sarà influenzata, dunque, dai privilegi necessari per accedere a quel percorso URL ovverosia sarà più critica se qualunque utente, anche non autenticato, può raggiungere tale percorso e sarà meno grave (seppur comunque di gravità elevata) se accessibile esclusivamente da un utente autenticato
- Nel secondo caso descritto, invece, ovverosia quello relativo all’accesso ad informazioni di altri utenti, questo si verifica molto spesso quando vengono utilizzati numeri progressivi facilmente identificabili (1,2, 1000, 1001, 1345, …, 5623, etc). Supponiamo dunque che l’accesso alla pagina dei dati dell’utente sia la seguente: https://sitowebvulnerabile.com/user/123. Un attaccante proverà, senza alcun ombra di dubbio, a modificare l’identificativo dell’utente “123” con un altro valore (es. 1, 124, 111, etc).
Difendersi da questa tipologia d’attacco è piuttosto facile:
- Implementare correttamente il controllo degli accessi
- Provvedere ad una verifica di tutti i percorsi prima della messa in produzione del servizio/applicativo
- Preferire l’utilizzo di UUID randomici per l’identificazione degli utenti a numeri progressivi interi