jueves, 1 de junio de 2023

Desarrollo seguro: la autorización

La autorización determina qué puede hacer un usuario o un sistema en nuestra aplicación.

Si la autenticación gestiona el acceso de un usuario, la autorización gestiona los permisos de ese usuario a las diferentes funciones, operaciones y recursos de la aplicación.


Imagen: CPO Magazine


Posibles riesgos

A continuación se describen algunos de los posibles riesgos relativos a la autorización:

  • Acceso no autorizado. Un usuario no autorizado podría acceder a recursos no permitidos.
  • Escalada vertical de privilegios. Acceso a los recursos de otro usuario con un nivel más alto de permisos.
  • Escalada horizontal de privilegios. Acceso a los recursos de otro usuario con el mismo nivel de acceso.
  • Revelación de información sensible. La aplicación podría dar más información de la necesaria, lo cual podría ser usada de forma perniciosa.
  • Violación de la privacidad. Un atacante accede a datos privados de otros usuarios.
  • Robo de identidad. Un atacante obtiene la identidad de un usuario y la usa para acceder a la aplicación y realizar acciones con sus permisos.
  • Robo de datos. Un atacante obtiene datos de forma ilícita.
  • Disponibilidad del servicio. Un atacante podría interrumpir o dañar el servicio o la ejecución de la aplicación.
  • Manipulación de datos. Un atacante podría interceptar datos entre cliente y servidor y manipular éstos.
  • Modificación de registros. Acceso a los registros de la aplicación o del sistema y modificación de éstos alterando su integridad.
  • Path transversal. Acceso fuera del contexto autorizado en el sistema de archivos del servidor.
  • Lógica de negocio. Un mal diseño de la aplicación podría permitir a un usuario realizar operaciones no permitidas, debido a que no sigue una lógica de negocio controlada.


Mejores prácticas

He aquí algunas recomendaciones para elevar la seguridad en la autorización:

  • Principio de privilegio mínimo. El usuario solo tiene permitido lo mínimo para realizar su trabajo.
  • Roles de aplicación. El usuario solo tiene roles, y los privilegios son tomados de dichos roles.
  • El acceso a los registros ha de estar protegido.
  • Cada usuario sólo puede acceder a los datos y recursos que le son autorizados.
  • Acceso al sistema de archivos esté deshabilitado. Este acceso solo puede ser habilitado de forma excepcional, justificada y expresa.
  • Las reglas de control de acceso solamente se han de aplicar en el servidor.
  • La gestión de acceso a datos, atributos, información, roles, políticas, etc. de los usuarios no pueden ser manipulados por usuarios no autorizados.
  • Uso de un servicio centralizado que proteja el acceso a cada recurso.
  • Uso de tokens aleatorios robustos anti-CSRF.
  • Registro de todo intento de control de acceso (registro de seguridad).
  • Registro específico y detallado (registro de seguridad) de todas las operaciones sobre datos sensibles.
  • Uso de captchas en operaciones sensibles.


Referencias