Una vulnerabilità di tipo Improper Access Control si verifica quando un’applicazione o un sistema non implementa correttamente le restrizioni di accesso ai dati, alle funzionalità o alle risorse. Questo può consentire ad un utente non autorizzato di accedere ad informazioni o eseguire azioni che non dovrebbero essere consentite, generando così un potenziale pericolo per utenti e sistemi. Comprensibilmente, a volte può essere correlato intrinsecamente ad una vulnerabilità di tipo Broken Authorization.
Tale vulnerabilità può avere conseguenze anche gravi per la sicurezza, poiché potrebbe consentire l’accesso ad elementi nevralgici del sistema che se correttamente utilizzati possono permettere l’esecuzione di azioni dannone sia nei confronti degli utenti che nei confronti del sistema stesso.
In base alla gravità e alla tipologia di Improper Access Control è possibile arrivare anche ad una compromissione del sistema stesso.
Le tipologie di attacco possono essere raggruppate come segue:
- Accesso diretto alle risorse: Consente agli utenti di accedere direttamente a risorse o URL sensibili senza verificarne adeguatamente i privilegi.
- Privilegi elevati non controllati: Concede a determinati utenti privilegi elevati senza verificare correttamente i loro diritti o autorizzazioni.
- Mancanza di validazione dei permessi: Non viene effettuata una corretta validazione dei permessi o dei ruoli assegnati agli utenti durante l’esecuzione di determinate azioni.
- Mancanza di controllo sui dati sensibili: Non vengono gestiti correttamente i dati sensibili permettendo ad un utente non autorizzato di ottenere tali informazioni.
- Errori di configurazione: Un’impropria configurazione del sistema o delle politiche di sicurezza consente ad un utente non autorizzato di accedere a risorse o funzionalità senza adeguato controllo.
Inoltre in base alla tipologia è possibile concatenare diverse tipologie di attacco in modo tale da sfuttare una vulnerabilità di tipo Improper Access Control. Gli attacchi più comuni sono i seguenti:
- Privilege Escalation: Un utente non autorizzato cerca di ottenere privilegi elevati o l’accesso a risorse o funzionalità riservate. Tale attacco può essere facilitato se è presente la vulnerabilità presa in esame in questo articolo.
- Vertical Access Control Bypass: Tramite tale attacco un utente cerca di bypassare le restrizioni verticali di accesso per accedere a funzionalità o risorse a cui non dovrebbe avere normalmente accesso.
- Ad esempio, un utente con un ruolo di livello inferiore cerca di accedere a funzioni riservate per un ruolo di livello superiore.
- Horizontal Access Control Bypass: simile al Vertical Access Control Bypass, un utente, in questo caso, cerca di bypassare le restrizioni orizzontali di accesso per accedere alle risorse o alle informazioni di altri utenti con lo stesso livello di privilegio.
- Insecure Direct Object Reference (IDOR): In questo attacco, un attaccante cerca di accedere a risorse o dati utilizzando identificatori diretti non protetti o non validati facilmente identificati e/o identificabili. L’attaccante manipola l’ID dell’oggetto per ottenere accesso a risorse a cui normalmente non dovrebbe avere accesso.
- Un possibile esempio è l’accesso a percorsi comuni e ai relativi file presenti al loro interno comportando un comportamento anomalo dell’applicativo.
- Forced Browsing: L’attaccante cerca di accedere direttamente alle risorse o alle pagine dell’applicazione bypassando le restrizioni di accesso. L’attaccante prova a indovinare o forzare gli URL delle pagine o delle risorse sensibili.
- Solitamente tale attacco viene automatizzato con varie tipologie di tool e wordlists il cui scopo specifico è di identificare pagine, risorse e percorsi.
- Insufficient Process Validation: Questo attacco sfrutta la mancanza di validazione dei processi per ottenere un accesso non autorizzato.
- Se un’applicazione consente l’accesso diretto a una funzionalità riservata senza verificare se l’utente ha completato i passaggi o le condizioni necessarie per accedervi tale attacco è applicabile.
- Misconfiguration Attacks: In questo tipo di attacco, l’attaccante sfrutta errori di configurazione del sistema o delle applicazioni per ottenere accesso non autorizzato.
- Ad esempio, se un’amministrazione del sistema non configura correttamente i file di autorizzazione o i set di privilegi, un attaccante potrebbe sfruttare tali errori per accedere a risorse sensibili.
Tramite un enumerazione iniziale con gobuster sono stati identificati diversi file tra cui info (contenente varie Information Disclosure relative agli applicativi) ed robots contenente percorsi permessi e non.
Dal file robots è possibile ottenere conoscenza dell’esistenza del percorso “/passwords/“. Accedendovi, si può identificare una vulnerabilità di tipo Improper Access Control in quanto tale accesso non dovrebbe essere autorizzato. Tali directory rivelano alcuni file sensibili tra cui backup di configurazioni che contengono a loro volta credenziali di vario genere (come ad esempio username e password di accesso al database o credenziali utente), utili per un elevazione dei privilegi o l’accesso non autorizzato alla piattaforma.
La cartella password, a causa di una vulnerabilità di tipo Directory Listing (quindi, sostanzialmente, appartenente alla macrocategoria delle Information Disclosure), permette la visualizzazione dei file al suo interno.
Uno scenario simile che però può portare a conseguenze distruttive è il seguente:
tramite enumerazione è stato reperito che il percorso “/setup” non effettua il redirect al login.
Tale percorso, inoltre, permette di effettuare un reset del database (come utente non autorizzato) provocando una cancellazione di tutti i dati presenti al sui interno.
Per mitigare tale vulnerabilità è necessario implementare un controllo degli accessi adeguato. Per ottenere tale risultato sono necessarie le seguenti verifiche:
- verifica dell’autenticazione degli utenti: è necessario verificare che le operazioni sensibili siano effettuabili solamente da utenti autenticati e dotati di privilegi sufficienti (prestare attenzione anche, e forse soprattutto, alle API, se disponibili).
- corretta gestione dei privilegi e dei ruoli: tale sistema permette l’assegnazione e la revoca dei privilegi degli utenti in base ai loro ruoli e alle loro responsabilità. Ciò assicura, se correttamente implementata, che solo gli utenti autorizzati abbiano i privilegi necessari per accedere a determinate funzionalità o risorse.
- validazione dei permessi: è necessario effettuare una validazione dei permessi lato server in modo tale da non effettuare una verifica solamente sulla base dei permessi forniti dal client ma anche quelli effettivi dell’utente.
- crittografia dei dati sensibili: eseguire una cifratura dei dati sensibili fornisce uno strato di protezione ulteriore e in caso di eventuali improper access control non mitigati non rivela i dati sensibili (come ad esempio credenziali).
- configurazione corretta dei file di autorizzazione: verificare che i file di autorizzazione del sistema siano configurati correttamente, in modo che solo gli utenti preposti possano accedervi. Ciò può includere restrizioni di accesso basate su permessi di lettura, scrittura ed esecuzione.
Inoltre alcune protezioni aggiuntive possono essere le seguenti:
- concedere agli utenti solo i privilegi necessari per svolgere la loro attività.
- effettuare un monitoraggio implementando un sistema che tenga traccia delle attività degli utenti e rilevare eventuali violazioni o accessi non autorizzati.