Introducció
El control d'accés trencat és una de les vulnerabilitats més comunes i perilloses en aplicacions web. Es produeix quan els mecanismes de control d'accés no estan implementats correctament, permetent als usuaris accedir a recursos o funcionalitats que no haurien de poder veure o modificar.
Conceptes Clau
- Control d'Accés: Mecanismes que determinen qui pot accedir a quins recursos dins d'una aplicació.
- Autenticació vs Autorització: L'autenticació verifica la identitat de l'usuari, mentre que l'autorització determina els permisos de l'usuari autenticat.
- Principi de Privilegi Mínim: Els usuaris només han de tenir els permisos necessaris per realitzar les seves tasques.
Exemples de Control d'Accés Trencat
-
Accés Directe a URL:
- Un usuari pot accedir a pàgines restringides simplement canviant l'URL.
- Exemple: Un usuari no autenticat accedeix a
http://example.com/admin
.
-
Manipulació de Paràmetres:
- Un usuari pot modificar paràmetres en les sol·licituds per obtenir accés no autoritzat.
- Exemple: Canviar el paràmetre
user_id
en una sol·licitud per veure la informació d'un altre usuari.
-
Controls d'Accés Insuficients en API:
- Les API poden no implementar correctament els controls d'accés, permetent accés no autoritzat a dades sensibles.
- Exemple: Una API que retorna dades d'usuaris sense verificar si l'usuari que fa la sol·licitud té permís per veure aquestes dades.
Pràctiques Recomanades per Prevenir el Control d'Accés Trencat
-
Implementar Controls d'Accés en el Backend:
- No confiar en el frontend per a la seguretat. Tots els controls d'accés han de ser implementats i verificats en el servidor.
-
Utilitzar Llistes de Control d'Accés (ACL):
- Definir clarament qui pot accedir a quins recursos i implementar aquestes regles de manera consistent.
-
Revisar i Provar Regularment els Controls d'Accés:
- Realitzar auditories i proves de penetració per assegurar-se que els controls d'accés estan funcionant correctament.
-
Principi de Privilegi Mínim:
- Assegurar-se que els usuaris només tenen els permisos necessaris per realitzar les seves tasques.
-
Utilitzar Biblioteques i Frameworks de Seguretat:
- Utilitzar solucions provades i testejades per implementar els controls d'accés.
Exemple Pràctic
Escenari
Una aplicació web permet als usuaris veure i editar els seus propis perfils. Els administradors poden veure i editar tots els perfils d'usuaris.
Implementació Incorrecta
# Pseudocodi per a una sol·licitud d'edició de perfil def edit_profile(request): user_id = request.GET['user_id'] profile = get_profile(user_id) if request.user.is_authenticated: profile.update(request.POST) return "Perfil actualitzat" else: return "Accés denegat"
Problema
En aquest exemple, qualsevol usuari autenticat pot editar el perfil de qualsevol altre usuari simplement canviant el user_id
en la sol·licitud.
Implementació Correcta
# Pseudocodi per a una sol·licitud d'edició de perfil amb control d'accés def edit_profile(request): user_id = request.GET['user_id'] profile = get_profile(user_id) if request.user.is_authenticated and (request.user.is_admin or request.user.id == profile.user_id): profile.update(request.POST) return "Perfil actualitzat" else: return "Accés denegat"
Explicació
En aquesta implementació, només els administradors o els usuaris que estan editant el seu propi perfil poden actualitzar la informació del perfil. Això assegura que els usuaris no puguin modificar els perfils d'altres usuaris.
Exercici Pràctic
Exercici
Implementa un control d'accés per a una funcionalitat de descàrrega de fitxers en una aplicació web. Només els usuaris autenticats han de poder descarregar fitxers, i només els fitxers que tenen permís per veure.
Solució
# Pseudocodi per a una sol·licitud de descàrrega de fitxer amb control d'accés def download_file(request): file_id = request.GET['file_id'] file = get_file(file_id) if request.user.is_authenticated and request.user.has_permission(file): return send_file(file.path) else: return "Accés denegat"
Explicació
En aquesta solució, es verifica que l'usuari estigui autenticat i que tingui permís per descarregar el fitxer abans de permetre la descàrrega.
Conclusió
El control d'accés trencat és una vulnerabilitat crítica que pot tenir conseqüències greus per a la seguretat d'una aplicació web. Implementar controls d'accés robustos i provar-los regularment és essencial per protegir les dades i funcionalitats de l'aplicació. En el següent tema, explorarem la configuració incorrecta de seguretat, una altra vulnerabilitat comuna en aplicacions web.
Curs d'OWASP: Directrius i Estàndards per a la Seguretat en Aplicacions Web
Mòdul 1: Introducció a OWASP
Mòdul 2: Principals Projectes d'OWASP
- OWASP Top Ten
- OWASP ASVS (Application Security Verification Standard)
- OWASP SAMM (Software Assurance Maturity Model)
- OWASP ZAP (Zed Attack Proxy)
Mòdul 3: OWASP Top Ten
- A1: Injecció
- A2: Pèrdua d'Autenticació
- A3: Exposició de Dades Sensibles
- A4: Entitats Externes XML (XXE)
- A5: Control d'Accés Trencat
- A6: Configuració Incorrecta de Seguretat
- A7: Cross-Site Scripting (XSS)
- A8: Deserialització Insegura
- A9: Ús de Components amb Vulnerabilitats Conegudes
- A10: Registre i Monitoratge Insuficients
Mòdul 4: OWASP ASVS (Application Security Verification Standard)
Mòdul 5: OWASP SAMM (Software Assurance Maturity Model)
Mòdul 6: OWASP ZAP (Zed Attack Proxy)
- Introducció a ZAP
- Instal·lació i Configuració
- Escaneig de Vulnerabilitats
- Automatització de Proves de Seguretat
Mòdul 7: Bones Pràctiques i Recomanacions
- Cicle de Vida de Desenvolupament Segur (SDLC)
- Integració de Seguretat en DevOps
- Capacitació i Sensibilització en Seguretat
- Eines i Recursos Addicionals
Mòdul 8: Exercicis Pràctics i Casos d'Estudi
- Exercici 1: Identificació de Vulnerabilitats
- Exercici 2: Implementació de Controls de Seguretat
- Cas d'Estudi 1: Anàlisi d'un Incident de Seguretat
- Cas d'Estudi 2: Millora de la Seguretat en una Aplicació Web