In base alle statistiche gestitedall'Open Web Application Security Project (OWASP), è possibile distinguere i dieci errori di protezione più comuni. Il grafico seguente mostra la frequenza con cui veracode, un'organizzazione di ricerca sulla sicurezza delle applicazioni Web, rileva queste vulnerabilità durante una valutazione preliminare del rischio.
Tasso di rilevamento delle vulnerabilità dall'elenco OWASP Top 10 durante la valutazione iniziale del rischio di veracode. Fonte: [Veracode]
Le vulnerabilità più comuni citate sopra secondo l'OWASP sono:
- Suscettibilità dell'iniezione di dati non attendibili in un interprete di codice come parte di un comando odi una query (SQLi, OS, XXE, LDAP). Un utente malintenzionato potrebbe eseguire comandi non pianificati o accedere ai dati senza un'autorizzazione adeguata.
- Meccanismi implementati in modo errato per l'autenticità e la gestione delle sessioni. Ciò consente all'utente malintenzionato di compromettere password, chiavi, token di sessione o dirottare l'identità di un altro utente dell'applicazione.
- Lo scripting tra siti (XSS)è un attacco che inietta JavaScript nel contenuto della pagina attaccata. Può essere utilizzato per dirottare la sessione di un utente, reindirizzare a un sito utente pericoloso, o attacchi di social engineering.
- Meccanismi di controllo degli accessi interrotti relativi alle autorizzazioni e alle risorse a cui un utente di sistema ha accesso. Un utente malintenzionato potrebbe sfruttare questa vulnerabilità per accedere a funzionalità non autorizzate o dati sensibili, nonché per accedere agli account di altri utenti.
- Impostazioni di sicurezza errate: per proteggere correttamente il sistema, vengono definite e implementate le impostazioni appropriate per l'applicazione, il framework, il server applicazioni, il server di database, la piattaforma e così via. Inoltre, il software dovrebbe essere aggiornato regolarmente.
- Condivisione di dati sensibili – Molte applicazioni Web e API non proteggono correttamente i dati sensibili come dati finanziari, medici o personali. Un utente malintenzionato può rubare o modificare tali informazioni scarsamente protette e utilizzarle per frode su una carta di credito, rubare identità o commettere altri crimini. I dati sensibili dovrebbero essere ulteriormente protetti dalla crittografia durante la trasmissione e l'archiviazione.
- Protezione inadeguata dagli attacchi: molti sistemi non hanno la capacità di base di rilevare, prevenire e rispondere ad attacchi manuali e automatizzati. È necessario implementare meccanismi che vadano oltre i meccanismi di base per la convalida dell'input e includano il rilevamento automatico, la registrazione e persino il blocco dei tentativi di attacco. Inoltre, i proprietari delle app devono essere in grado di caricare facilmente le patch di sicurezza.
- Csrf (Cross-Site Request Forgery) – consiste nel costringere il browser dell'utente a inviare una query al server nel contesto di tale utente. Consente quindi alla vittima di eseguire alcune azioni non autorizzate, ad esempio cambiando la password, effettuando un trasferimento.
- L'utilizzo di componenti con vulnerabilità note, ad esempio librerie, framework e altri moduli utilizzati nel software, funziona con le stesse autorizzazioni dell'applicazione stessa. Se un componente vulnerabile viene compromesso, tale attacco può rappresentare una seria minaccia per i dati o per il sistema nel suo complesso. Le applicazioni che utilizzano componenti con vulnerabilità note possono rimuovere il livello che protegge l'applicazione aprendola a vari tipi di attacchi.
- API non protette: le applicazioni odierne spesso forniscono API per comunicare con esse oltre alle funzionalità di base(SOAP/XML, REST/JSON, RPC, GWT e così via). Queste interfacce sono spesso insicure e contengono molte vulnerabilità.