Blog
dark mode light mode Search Archivos descargables
Search

Vulnerabilidades: Qué es Broken Access Control y cómo solucionarlo

broken access control vulnerability

¿Qué es Access Control? 

Antes de entender la vulnerabilidad veamos qué es un control de acceso (Access Control). 

El control de acceso (Access Control) es un mecanismo en el que se especifica qué información, funciones o sistemas serán accesibles para un usuario, grupo o rol en particular. Es decir, es una manera de controlar quién puede acceder a ciertos recursos, generalmente, mediante el uso de políticas para especificar los privilegios de acceso.

En las aplicaciones web, el control de acceso implica usar de mecanismos de protección como:

  • Autenticación (verificar la identidad del usuario)
  • Autorización (comprobar si el usuario tiene permiso de acceder a un recurso).

¿Qué es un Broken Access Control?

La vulnerabilidad Broken Access Control ocurre cuando una falla o una ausencia de mecanismos de control de acceso le permite a un usuario acceder a un recurso que está fuera de sus permisos previstos.

Esta vulnerabilidad es una de las más comunes en sitios web y ocupa el puesto N°5 en el OWASP TOP 10 (Open Web Application Security Project). 

Debido a la cantidad de errores relacionados con el control de acceso, existen varias vulnerabilidades bajo la categoría de Broken Access Control, algunas de ellas son:

Ha sido clasificada por la CWE (Common Weakness Enumeration) como CWE-284: Improper Access Control. Puedes visitar su ficha técnica para saber más especificaciones.

Riesgos del Broken Access Control

Los riesgos de esta vulnerabilidad dependen de la interacción que el atacante consiga tener con el servidor de una empresa. 

Sin embargo, en el caso de las empresas, es común que ocasiones desde fugas de información hasta la alteración de datos sensibles o confidenciales.

Caso común

Broken Access Control en funciones administrativas

Un sitio web permite a los administradores listar los correos electrónicos de sus usuarios desde una URL similar a la siguiente.

https://sitio-inseguro.com/admin/listar_mails

Aquí podría haber dos posibles escenarios de Broken Access Control:

  1. En el caso de que un usuario no autenticado pueda acceder y obtener la lista de e-mails.
  2. En el caso de que un usuario autenticado que no es administrador logre acceder y obtener la lista de mails.

En ambos casos, la aplicación sería vulnerable.

Tips para prevenirla

Prevenir esta vulnerabilidad puede ser complejo ya que hay muchos escenarios que te pueden conducir a ella, sin embargo, existen buenas prácticas que puedes implementar para lograr mitigarla, como por ejemplo:

  • Comprobar la implementación de un correcto control de acceso, estableciendo roles y permisos para acceder a los recursos.
  • Verificar que el acceso a los recursos mediante ID posea un paso de verificación adicional que asegure el ingreso de usuarios autorizados
  • Denegar el acceso a sus recursos de forma predeterminada, a menos que desee que sean públicos.

Como se ve un Broken Access Control en el código

Supongamos que un sitio web permite a sus usuarios registrarse y publicar artículos de blog. 

Durante ese registro, el usuario debe entregar datos como su correo electrónico y nombre, y los administradores del sitio pueden ver esta información desde un menú (solo accesible para administradores) que tiene la opción “Ver todos los mails”. Esta sería la URL resultante:

https://sitio-inseguro.com/admin/ver_todos_los_mails.php

Y al acceder aquí se ejecuta el siguiente código:

if (isset($_SESSION[‘loggedin’]) { 

cargar_emails(); 

else

return_to_login(); 
}

El servidor efectivamente solicita al usuario que inicie sesión para acceder al listado de e-mails, sin embargo, no comprueba su rol o sus permisos. 

Por lo tanto, la aplicación es vulnerable ya que un usuario autenticado pero sin permisos puede acceder a una funcionalidad pensada únicamente para administradores.

Solución

El servidor también debería comprobar qué roles o permisos posee el usuario al acceder al recurso. Para ello, sería necesario modificar el código para que contenga lo siguiente:

if (isset($_SESSION[‘loggedin’]) && $_SESSION[‘isadmin’] == true)) { 

cargar_emails(); 


else
return_to_login(); 
}

De esta forma, cualquier usuario que no esté autenticado o que no esté autorizado (que no sea administrador), será redirigido a la página de Iniciar sesión.

Un pentest nunca está de más

Las vulnerabilidades Broken Access Control son muy comunes no solo por la falta de pruebas funcionales efectivas por parte de los desarrolladores, sino también por la falta de detección automatizada (herramientas de revisión estáticas y dinámicas). 

Por este motivo, hacer un ejercicio de ethical hacking (del tipo penetration testing, pruebas manuales de intrusión o pentest) es la opción más conveniente y viable para detectarlas a tiempo y mitigarlas de raíz.

Conclusión

La vulnerabilidad Broken Access Control suele aparecer cuando existen errores en la implementación de controles de acceso. 

Si bien puede parecer una vulnerabilidad simple e inofensiva, su impacto puede llegar a ser crítico y la dificultad de encontrarla utilizando herramientas automatizadas puede hacerla pasar desapercibida.

Considera seguir las buenas prácticas detalladas más arriba y realizar pruebas de intrusión de forma periódica para encontrar esta y cualquier otro tipo de vulnerabilidad .

Hackmetrix newsletter ciberseguridad