Broken Access Control
🌐 Vulnerabilidad: Broken Access Control (Control de Acceso Roto)
🕵️♂️ ¿Qué es Broken Access Control?
La vulnerabilidad Broken Access Control ocurre cuando una aplicación no implementa correctamente controles de acceso, lo que permite a los usuarios realizar acciones o acceder a recursos para los cuales no tienen permisos. Esto incluye acceso no autorizado a datos sensibles, operaciones administrativas o recursos de otros usuarios.
⚙️ ¿Cómo se produce?
Ausencia de validación de permisos: El servidor no verifica si el usuario tiene autorización para acceder a un recurso o realizar una acción.
Controles de acceso mal implementados: Los permisos están definidos, pero no se aplican correctamente.
Escalada de privilegios: Un usuario con permisos limitados manipula solicitudes para obtener acceso administrativo.
Errores en la lógica de acceso: Como permitir acceso basado solo en roles mal configurados o falta de comprobación en rutas sensibles.
🛠️ Mecanismo de ataque
IDOR (Insecure Direct Object Reference):
El atacante accede a recursos de otros usuarios manipulando identificadores.
Cambiado a:
Manipulación de roles:
El atacante modifica su rol o privilegios en la solicitud:
Acceso directo a rutas protegidas:
El atacante accede a rutas administrativas sin restricciones:
🎯 Impacto
Exposición de datos sensibles: Información personal, financiera o corporativa.
Modificación no autorizada: Cambiar configuraciones, datos de otros usuarios o contenido sensible.
Escalada de privilegios: Permitir a usuarios sin permisos realizar acciones administrativas.
Eliminación de datos: Un atacante puede eliminar recursos críticos.
📉 Puntaje CVSS v3
Vector de ataque: Red (Explotable remotamente)
Complejidad del ataque: Baja
Impacto en confidencialidad: Alto
Impacto en integridad: Alto
Impacto en disponibilidad: Medio a alto
Puntaje CVSS v3: 8.0 - 10.0 (Crítico) 🔥
🧑💻 Ejemplo práctico
Código vulnerable en PHP:
📌 Ataque: El atacante manipula la URL para acceder a pedidos de otro usuario:
Esto devuelve datos no autorizados.
🛡️ ¿Cómo prevenir Broken Access Control?
1️⃣ Validar siempre los permisos
Verifica que el usuario tenga autorización antes de acceder o modificar recursos:
2️⃣ Implementar controles en el servidor
Nunca confíes en controles implementados únicamente en el cliente (JavaScript). Asegúrate de validar en el backend.
3️⃣ Usar principios de menor privilegio
Diseña roles y permisos de manera que cada usuario tenga acceso solo a lo estrictamente necesario.
4️⃣ Restringir rutas críticas
Configura reglas específicas para proteger rutas administrativas:
En Apache:
En Express (Node.js):
5️⃣ Auditorías y pruebas de seguridad
Realiza pruebas de control de acceso con herramientas como Burp Suite para detectar rutas o funciones desprotegidas.
6️⃣ Usar bibliotecas y frameworks seguros
Utiliza middleware o extensiones que gestionen roles y permisos de manera automatizada, como Laravel Gates o Spring Security.
💡 Dato extra: Los controles de acceso rotos son la causa principal de escaladas de privilegios y uno de los problemas más destacados en el OWASP Top 10.
🚨 Nota importante: Las rutas ocultas mediante métodos como robots.txt
o enlaces no visibles en el frontend no son un sustituto para un control de acceso adecuado.
Última actualización
¿Te fue útil?