A01:2025 Broken Access Control 
Contesto.
Mantenendo la sua posizione al #1 nel Top Ten, il 100% delle applicazioni testate è risultato avere qualche forma di broken access control. Tra le CWE degne di nota vi sono CWE-200: Exposure of Sensitive Information to an Unauthorized Actor, CWE-201: Exposure of Sensitive Information Through Sent Data, CWE-918 Server-Side Request Forgery (SSRF) e CWE-352: Cross-Site Request Forgery (CSRF). Questa categoria ha il maggior numero di occorrenze nei dati contribuiti e il secondo più alto numero di CVE correlati.
Tabella dei punteggi.
| CWE Mappate | Tasso Massimo di Incidenza | Tasso Medio di Incidenza | Copertura Massima | Copertura Media | Exploit Medio Ponderato | Impatto Medio Ponderato | Totale Occorrenze | Totale CVE |
| 40 | 20,15% | 3,74% | 100,00% | 42,93% | 7,04 | 3,84 | 1.839.701 | 32.654 |
Descrizione.
Il controllo degli accessi applica policy tali per cui gli utenti non possono agire al di fuori dei propri permessi previsti. I fallimenti portano tipicamente a divulgazione non autorizzata di informazioni, modifica o distruzione di tutti i dati, o all'esecuzione di una funzione di business al di fuori dei limiti dell'utente. Le vulnerabilità comuni di controllo degli accessi includono:
- Violazione del principio del minimo privilegio, comunemente noto come deny by default, dove l'accesso dovrebbe essere concesso solo per determinate capacità, ruoli o utenti, ma è disponibile a chiunque.
- Aggiramento dei controlli di accesso modificando l'URL (parameter tampering o force browsing), lo stato interno dell'applicazione o la pagina HTML, oppure utilizzando uno strumento di attacco che modifica le richieste API.
- Permettere la visualizzazione o la modifica dell'account di qualcun altro fornendo il suo identificatore univoco (insecure direct object references).
- Un'API accessibile con controlli di accesso mancanti per POST, PUT e DELETE.
- Escalation di privilegi. Agire come utente senza essere autenticati o acquisire privilegi superiori a quelli previsti per l'utente autenticato (es. accesso admin).
- Manipolazione dei metadati, come il replay o la manomissione di un token di controllo degli accessi JSON Web Token (JWT), un cookie o un campo nascosto manipolato per elevare i privilegi, o l'abuso dell'invalidazione JWT.
- La configurazione errata di CORS consente l'accesso alle API da origini non autorizzate o non attendibili.
- Force browsing (indovinare URL) verso pagine autenticate come utente non autenticato o verso pagine privilegiate come utente standard.
Come prevenire.
Il controllo degli accessi è efficace solo se implementato in codice lato server attendibile o in API serverless, dove l'attaccante non può modificare il controllo degli accessi o i metadati.
- Tranne per le risorse pubbliche, negare l'accesso per default.
- Implementare i meccanismi di controllo degli accessi una sola volta e riutilizzarli in tutta l'applicazione, inclusa la minimizzazione dell'utilizzo del Cross-Origin Resource Sharing (CORS).
- I modelli di controllo degli accessi devono applicare la proprietà dei record piuttosto che consentire agli utenti di creare, leggere, aggiornare o eliminare qualsiasi record.
- I requisiti di limite di business univoci dell'applicazione devono essere applicati dai modelli di dominio.
- Disabilitare il directory listing del web server e garantire che i metadati dei file (es. .git) e i file di backup non siano presenti nelle web root.
- Registrare i fallimenti del controllo degli accessi, inviare alert agli amministratori quando appropriato (es. fallimenti ripetuti).
- Implementare limiti di frequenza sull'accesso ad API e controller per minimizzare i danni degli strumenti di attacco automatizzati.
- Gli identificatori di sessione con stato devono essere invalidati sul server dopo il logout. I token JWT senza stato devono avere una durata breve per minimizzare la finestra di opportunità per un attaccante. Per JWT con durata più lunga, considerare l'uso di refresh token e seguire gli standard OAuth per revocare l'accesso.
- Utilizzare toolkit o pattern ben consolidati che forniscono controlli degli accessi semplici e dichiarativi.
Gli sviluppatori e il personale QA devono includere test funzionali del controllo degli accessi nei test unitari e di integrazione.
Scenari di attacco di esempio.
Scenario #1: L'applicazione utilizza dati non verificati in una chiamata SQL che accede alle informazioni dell'account:
pstmt.setString(1, request.getParameter("acct"));
ResultSet results = pstmt.executeQuery( );
Un attaccante può semplicemente modificare il parametro 'acct' del browser per inviare qualsiasi numero di account desiderato. Se non verificato correttamente, l'attaccante può accedere all'account di qualsiasi utente.
https://example.com/app/accountInfo?acct=notmyacct
Scenario #2: Un attaccante costringe semplicemente il browser a puntare a URL specifici. Sono necessari i diritti di amministratore per accedere alla pagina di amministrazione.
https://example.com/app/getappInfo
https://example.com/app/admin_getappInfo
Se un utente non autenticato può accedere a una delle due pagine, si tratta di una falla. Se un non-amministratore può accedere alla pagina di amministrazione, si tratta di una falla.
Scenario #3: Un'applicazione gestisce tutto il controllo degli accessi nel front-end. Sebbene l'attaccante non riesca ad accedere a https://example.com/app/admin_getappInfo a causa del codice JavaScript in esecuzione nel browser, può semplicemente eseguire:
$ curl https://example.com/app/admin_getappInfo
dalla riga di comando.
Riferimenti.
- OWASP Proactive Controls: C1: Implement Access Control
- OWASP Application Security Verification Standard: V8 Authorization
- OWASP Testing Guide: Authorization Testing
- OWASP Cheat Sheet: Authorization
- PortSwigger: Exploiting CORS misconfiguration
- OAuth: Revoking Access
Lista delle CWE Mappate
- CWE-22 Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
- CWE-23 Relative Path Traversal
- CWE-36 Absolute Path Traversal
- CWE-59 Improper Link Resolution Before File Access ('Link Following')
- CWE-61 UNIX Symbolic Link (Symlink) Following
- CWE-65 Windows Hard Link
- CWE-200 Exposure of Sensitive Information to an Unauthorized Actor
- CWE-201 Exposure of Sensitive Information Through Sent Data
- CWE-219 Storage of File with Sensitive Data Under Web Root
- CWE-276 Incorrect Default Permissions
- CWE-281 Improper Preservation of Permissions
- CWE-282 Improper Ownership Management
- CWE-283 Unverified Ownership
- CWE-284 Improper Access Control
- CWE-285 Improper Authorization
- CWE-352 Cross-Site Request Forgery (CSRF)
- CWE-359 Exposure of Private Personal Information to an Unauthorized Actor
- CWE-377 Insecure Temporary File
- CWE-379 Creation of Temporary File in Directory with Insecure Permissions
- CWE-402 Transmission of Private Resources into a New Sphere ('Resource Leak')
- CWE-424 Improper Protection of Alternate Path
- CWE-425 Direct Request ('Forced Browsing')
- CWE-441 Unintended Proxy or Intermediary ('Confused Deputy')
- CWE-497 Exposure of Sensitive System Information to an Unauthorized Control Sphere
- CWE-538 Insertion of Sensitive Information into Externally-Accessible File or Directory
- CWE-540 Inclusion of Sensitive Information in Source Code
- CWE-548 Exposure of Information Through Directory Listing
- CWE-552 Files or Directories Accessible to External Parties
- CWE-566 Authorization Bypass Through User-Controlled SQL Primary Key
- CWE-601 URL Redirection to Untrusted Site ('Open Redirect')
- CWE-615 Inclusion of Sensitive Information in Source Code Comments
- CWE-639 Authorization Bypass Through User-Controlled Key
- CWE-668 Exposure of Resource to Wrong Sphere
- CWE-732 Incorrect Permission Assignment for Critical Resource
- CWE-749 Exposed Dangerous Method or Function
- CWE-862 Missing Authorization
- CWE-863 Incorrect Authorization
- CWE-918 Server-Side Request Forgery (SSRF)
- CWE-922 Insecure Storage of Sensitive Information
- CWE-1275 Sensitive Cookie with Improper SameSite Attribute