Cos'è l'OWASP Top 10 e perché è importante
L'OWASP Top 10 (Open Web Application Security Project) è la lista delle 10 vulnerabilità più critiche e diffuse nelle applicazioni web, aggiornata periodicamente con dati reali da migliaia di applicazioni testate nel mondo. L'edizione più recente è del 2021 e rimane lo standard di riferimento per qualsiasi valutazione della sicurezza delle applicazioni web.
Non è una lista accademica: ogni categoria rappresenta vulnerabilità attivamente sfruttate dagli attaccanti per violare applicazioni reali. Il 75% degli attacchi informatici si concentra sullo strato applicativo (fonte: Gartner), non sull'infrastruttura di rete. Conoscere l'OWASP Top 10 è il prerequisito minimo per chiunque sviluppi, gestisca o commissioni applicazioni web.
OWASP Top 10 2021: le vulnerabilità più critiche
A01 — Broken Access Control
La categoria più comune nel 2021: il 94% delle applicazioni testate aveva almeno una forma di Broken Access Control. Include l'accesso non autorizzato a risorse di altri utenti (IDOR — Insecure Direct Object Reference), la possibilità di accedere a funzioni amministrative senza autorizzazione, e il mancato rispetto del principio di least privilege. Esempio: cambiare ?user_id=123 in ?user_id=124 nell'URL e accedere ai dati di un altro utente.
A02 — Cryptographic Failures
Dati sensibili (password, numeri di carta di credito, dati sanitari) trasmessi o conservati senza cifratura adeguata, o con algoritmi deboli (MD5, SHA1 per le password, TLS 1.0/1.1). In Italia, il GDPR impone la cifratura dei dati personali: una Cryptographic Failure è spesso anche una violazione normativa.
A03 — Injection
Le vulnerabilità di injection — SQL injection, LDAP injection, Command injection, XPath injection — permettono a un attaccante di iniettare codice malevolo interpretato dall'applicazione. Una SQL injection classica come ' OR '1'='1 in un campo login può bypassare l'autenticazione e accedere all'intero database. Nonostante siano note da decenni, le injection rimangono diffuse nelle applicazioni legacy.
A04 — Insecure Design
Novità del 2021: i problemi di sicurezza che nascono in fase di progettazione, non solo di implementazione. Un sistema di recupero password che invia la password in chiaro via email, un'applicazione che non limita il numero di tentativi di login, un portale B2B che non separa i dati di clienti diversi: sono tutti problemi di design che nessun penetration test può "risolvere" senza riscrivere la logica applicativa.
A05 — Security Misconfiguration
La seconda categoria più diffusa in assoluto: permessi eccessivi su storage cloud (bucket S3 pubblici), pagine di debug e stack trace esposti in produzione, credenziali di default non cambiate, header HTTP di sicurezza mancanti (CSP, HSTS, X-Frame-Options). Spesso rilevabile con strumenti automatici, ma sistematicamente ignorata nel rush di deployment.
A06 — Vulnerable and Outdated Components
Il 91% delle applicazioni web usa librerie di terze parti (npm, Maven, PyPI). Una sola dipendenza vulnerabile — come Log4Shell (CVE-2021-44228) che ha colpito milioni di sistemi nel 2021 — può compromettere l'intera applicazione. Il Software Bill of Materials (SBOM) e il monitoraggio continuo delle CVE sulle dipendenze sono la contromisura essenziale.
A07 — Identification and Authentication Failures
Sessioni non invalidate dopo il logout, token JWT senza scadenza, mancanza di MFA su account privilegiati, password deboli permesse dall'applicazione, implementazioni personalizzate di autenticazione invece di framework consolidati. Ogni implementazione custom dell'autenticazione è una potenziale vulnerabilità.
A08 — Software and Data Integrity Failures
Aggiornamenti software non verificati, pipeline CI/CD che scaricano dipendenze senza verifica dell'integrità, deserializzazione di dati non fidati. Il supply chain attack SolarWinds (2020) è l'esempio più clamoroso: un aggiornamento legittimo conteneva codice malevolo non rilevato per mesi.
A09 — Security Logging and Monitoring Failures
Il 197 giorni di dwell time medio (tempo tra compromissione e rilevamento) dipende in gran parte dall'assenza di log adeguati. Senza logging degli accessi, dei fallimenti di autenticazione, delle query anomale al database, un attaccante può operare indisturbato per mesi. I log devono essere centralizzati, immutabili e monitorati in tempo reale.
A10 — Server-Side Request Forgery (SSRF)
Vulnerabilità sempre più sfruttata con la proliferazione dei servizi cloud: l'attaccante forza il server a fare richieste verso risorse interne o metadata endpoint del cloud provider (AWS IMDS, Azure IMDS), ottenendo credenziali IAM e accesso a risorse interne non altrimenti raggiungibili dall'esterno.
Gli scanner automatici (Burp Suite Scanner, OWASP ZAP in modalità automatica, Nessus Web Scanner) trovano molte vulnerabilità A05 e A06 ma raramente rilevano A01 (IDOR), A04 (Insecure Design) e le vulnerabilità di business logic. Per trovare queste vulnerabilità serve un penetration tester umano che comprenda la logica dell'applicazione.
Il Web Application Penetration Test (WAPT): come funziona
Un WAPT (Web Application Penetration Test) è la valutazione manuale della sicurezza di un'applicazione web condotta da un pentester certificato. A differenza di uno scanner automatico, il pentester testa:
- La logica di business: il flusso di checkout può essere manipolato per applicare sconti non autorizzati?
- Le autorizzazioni orizzontali e verticali: un utente normale può accedere a funzioni admin?
- La concatenazione di vulnerabilità: una XSS + un CSRF insieme permettono di compiere azioni non autorizzate?
- Le funzionalità specifiche dell'applicazione: API REST/GraphQL, WebSocket, SSO, upload di file
Un WAPT per una PMI con un'applicazione di medie dimensioni dura tipicamente 3-10 giorni lavorativi e costa 3.000-8.000 €. Il report include una lista di vulnerabilità con CVSS score, proof-of-concept, e raccomandazioni di remediation concrete.
Come proteggere le applicazioni web: controlli pratici
Secure Development Lifecycle (SDL)
La sicurezza deve essere integrata nel ciclo di sviluppo, non aggiunta a posteriori. I controlli minimi: threat modeling in fase di design, code review con focus sulla sicurezza, test SAST (Static Application Security Testing) integrato nel CI/CD, DAST (Dynamic Application Security Testing) nell'ambiente di staging prima di ogni rilascio in produzione.
Input Validation e Output Encoding
La regola d'oro contro injection e XSS: non fidarsi mai dell'input utente. Tutti i dati in ingresso devono essere validati (tipo, lunghezza, formato, range); tutti i dati in uscita verso HTML, SQL, LDAP, shell devono essere correttamente encoded/escaped con le funzioni del framework — mai con regex personalizzate.
Autenticazione e Sessioni
Usa framework di autenticazione consolidati (OAuth 2.0, OpenID Connect) invece di implementazioni custom. Implementa MFA su tutti gli account privilegiati. I token di sessione devono essere crittograficamente casuali, invalidati al logout, con scadenza appropriata. Usa HTTPS everywhere, con HSTS preloading.
Dependency Management
Monitora continuamente le vulnerabilità nelle dipendenze con strumenti come OWASP Dependency-Check, Snyk o GitHub Dependabot. Mantieni un Software Bill of Materials (SBOM) aggiornato. Non usare versioni abbandonate di framework (es. jQuery < 3.5, Angular.js 1.x).
Security Headers HTTP
Headers come Content-Security-Policy, Strict-Transport-Security, X-Frame-Options, X-Content-Type-Options, Referrer-Policy bloccano interi vettori di attacco (XSS, clickjacking, MIME sniffing) con zero impatto sulle funzionalità. Verificali con securityheaders.com.
Domande frequenti
Cos'è l'OWASP Top 10?
È la lista delle 10 vulnerabilità più critiche nelle applicazioni web, pubblicata dall'Open Web Application Security Project. Rappresenta il riferimento standard per security testing e sviluppo sicuro. L'edizione 2021 include Broken Access Control, Cryptographic Failures, Injection, Insecure Design, Security Misconfiguration e altre categorie.
Cos'è un Web Application Penetration Test (WAPT)?
Un test manuale condotto da un pentester certificato su un'applicazione web per trovare vulnerabilità non rilevabili dagli scanner automatici, come IDOR, business logic flaws e vulnerability chaining. Costa tipicamente 3.000-8.000 € per una PMI e dura 3-10 giorni lavorativi.
Ogni quanto fare un test di sicurezza sulle applicazioni web?
Minimo un WAPT annuale e dopo ogni rilascio significativo. PCI DSS lo richiede dopo ogni modifica sostanziale al codice. Per applicazioni critiche (e-commerce, portali clienti) si raccomanda testing continuo integrato nel pipeline CI/CD con strumenti SAST/DAST.