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

  1. 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.
  2. 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.
  3. 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

  1. 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.
  2. Utilitzar Llistes de Control d'Accés (ACL):

    • Definir clarament qui pot accedir a quins recursos i implementar aquestes regles de manera consistent.
  3. 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.
  4. Principi de Privilegi Mínim:

    • Assegurar-se que els usuaris només tenen els permisos necessaris per realitzar les seves tasques.
  5. 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

Mòdul 3: OWASP Top Ten

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)

Mòdul 7: Bones Pràctiques i Recomanacions

Mòdul 8: Exercicis Pràctics i Casos d'Estudi

Mòdul 9: Avaluació i Certificació

© Copyright 2024. Tots els drets reservats