Control de acceso roto
Definición
El control de acceso roto (broken access control) ocurre cuando una aplicación no logra imponer a qué puede acceder o qué puede hacer un llamante.
Por qué importa
Esta es una de las clases de mayor impacto en aplicaciones reales porque a menudo lleva directamente a:
- acceso no autorizado a datos
- acciones no autorizadas
- escalada de privilegios
- abuso de workflow
- exposición del plano de admin/control
Es más amplia que cualquier subtipo individual. Es el área de riesgo paraguas que incluye:
- fallas a nivel de objeto
- fallas a nivel de función
- fallas a nivel de propiedad
- exposición de funciones ocultas
- enforcement débil de tenant o de propiedad
Cómo funciona
El mecanismo es:
- la aplicación autentica a un llamante
- el sistema expone datos o funcionalidad
- el servidor no logra verificar si ese llamante tiene permitido acceder a ese recurso o acción en ese contexto
La distinción importante es:
- la autenticación responde quién sos
- la autorización responde qué podés hacer / acceder
Técnicas / patrones
Los atacantes normalmente testean cambiando:
- identificadores de objeto
- rutas y familias de rutas
- métodos
- parámetros ocultos
- roles y scopes
- etapa / estado del workflow
- superficies específicas del cliente
- valores a nivel de campo que no deberían ser escribibles
Variantes y bypasses
Falla de autorización a nivel de objeto
Notas relacionadas: IDOR, Broken Object-Level Authorization
Falla de autorización a nivel de función
Notas relacionadas: Broken Function-Level Authorization
Falla de autorización a nivel de propiedad
Notas relacionadas: Broken Object-Property-Level Authorization, Mass assignment, Exposición excesiva de datos
Falla de UI oculta
El frontend oculta la capacidad, pero el backend la acepta.
Deriva cross-versión o cross-cliente
Un cliente o versión impone el acceso correctamente, otro no.
Falla de frontera de tenant / propiedad
El sistema confía en referencias o estado sin imponer correctamente la propiedad o la separación de tenants.
Impacto
Impacto típico:
- leer los datos de otro usuario
- modificar los recursos de otro usuario
- invocar acciones solo-de-admin o solo-de-staff
- cambiar el estado de un workflow protegido
- colapso de la frontera multi-tenant
- escalada de privilegios
Detección y defensa
Ordenado por efectividad:
- Tratá la autorización como un sistema del lado del servidor de primera clase
- Imponé autorización en cada camino de acceso
- Separá los chequeos de objeto, función y propiedad
- Negá por defecto
- Testeá múltiples identidades y roles
- Logueá los intentos de acceso negados y sospechosos
- Revisá la deriva entre versiones y clientes
Ejemplos prácticos
- un usuario normal lee la factura de otro usuario
- un endpoint mobile permite un bypass de control de acceso no presente en la UI web
- una acción de admin es invocable directamente
- un campo JSON escribible deja a un usuario escalar propiedad o rol
- una ruta legacy preserva reglas de autorización más débiles
Notas relacionadas
Notas atómicas futuras sugeridas
- Fallas de frontera de tenant
- Deriva de autorización entre clientes
Referencias
- Foundational: OWASP Top 10 Broken Access Control — https://owasp.org/Top10/2021/A01_2021-Broken_Access_Control/
- Foundational: OWASP WSTG authorization testing — https://owasp.org/www-project-web-security-testing-guide/latest/
- Testing / Lab: PortSwigger access control topic — https://portswigger.net/web-security/access-control