Mitigación de Broken Access Control en Aplicaciones Web

Clase 5 de 15Curso de OWASP Top 10: Riesgos en Aplicaciones

Resumen

¿Qué es el Broken Access Control?

En el mundo de la seguridad informática, el término "Broken Access Control" se refiere a situaciones donde un usuario puede realizar acciones fuera de los límites permitidos. Este riesgo es el más crítico dentro del Top 10 de riesgos de seguridad web de OWASP, identificado con el código A01.

¿Cuáles son algunos ejemplos de Broken Access Control?

  1. Violación del principio de mínimo privilegio: Este enfoque sigue el modelo de Zero Trust, donde todo está denegado por defecto, permitiéndose únicamente lo necesario.
  2. Modificación de URLs: Las URLs pueden ser manipuladas para acceder a recursos no autorizados. Por ejemplo, al cambiar el ID de un curso en una plataforma de aprendizaje.
  3. Acciones no autorizadas en variables: Manipulando variables como ACTION en una URL, se pueden crear, eliminar o modificar registros de bases de datos sin permiso.

¿Qué impacto puede tener este riesgo?

Un ejemplo claro fue la vulnerabilidad explotada en Confluence Server bajo el código 2023-22515. Esta permitió a ciberdelincuentes ejecutar software que cifró información y datos sensibles, demostrando cómo un fallo de Broken Access Control puede tener graves consecuencias.

¿Cómo podemos mitigar el Broken Access Control?

Para contrarrestar este riesgo, es crucial implementar una serie de controles y buenas prácticas:

  1. Principio de denegación por defecto: Limita el acceso solo a lo estrictamente necesario por usuario o rol.
  2. Aplicación de políticas de control de acceso: Integra reglas de acceso desde el diseño arquitectónico de la aplicación.
  3. Evitar directorios navegables: Previene que los usuarios vean información sensible del servidor web.
  4. Monitoreo de actividad: Revisa constantemente las acciones de los usuarios, especialmente al crear, editar o eliminar registros.
  5. Establecimiento de rate limits en APIs: Impone límites a las solicitudes, bloqueando excesos para evitar abusos.
  6. Expiry en JWTs (JSON Web Tokens): Define con precisión el tiempo de expiración para mitigar ataques de suplantación.

¿Qué prácticas podemos adoptar para detectar y corregir el Broken Access Control?

Examinar aplicaciones vulnerables es una excelente forma de aprendizaje. Por ejemplo, en una aplicación de aprendizaje con dos perfiles (administrador y usuario normal), puedes observar cómo un usuario con menos privilegios intenta acceder a opciones restringidas.

Al interceptar peticiones con herramientas como Burp Suite, puedes captar y analizar credenciales, modificando valores codificados como base64 para elevar privilegios.

Veamos un ejemplo de manipulación:

// Intentamos decodificar una cadena base64 y cambiar su contenido
let cadenaCodificada = "dXNlcjpteV9yb2w="; // Representa "user:my_role"
let cadenaDecodificada = atob(cadenaCodificada);
console.log(cadenaDecodificada); // Salida: "user:my_role"

// Ahora cambiamos el rol a "admin"
cadenaDecodificada = cadenaDecodificada.replace("my_role", "admin");
console.log(cadenaDecodificada); // Salida: "user:admin"

Al enviar la petición nuevamente con una cookie manipulada, se puede observar que el sistema otorga acceso indebido a funciones de administrador.

Para corregir estos problemas, es esencial validar los roles a nivel de base de datos, en lugar de depender únicamente de cookies.

¡Te animamos a explorar y practicar con estas estrategias para proteger tus aplicaciones y fortalecer tus habilidades de seguridad informática!