Control de acceso

LIBP-0254 (Libro de pautas)

Se deben tener en cuenta las siguientes indicaciones para el control de acceso y privilegios de los usuarios en las aplicaciones

Pautas

TítuloCarácter
Manejo de permisos y privilegiosObligatoria
Asignación incorrecta de privilegiosObligatoria
Cacheo del resultado de una operación privilegiadaNo Recomendada
Rutinas de autorización Recomendada
Manejo de permisos por defectoObligatoria
Cuentas de usuariosObligatoria
Acceso a base de datosObligatoria

Manejo de permisos y privilegios

Garantizar que los permisos y privilegios sean suficientes y que, además, sean los correctos.

La aplicación puede tener un mal funcionamiento si no tiene suficientes privilegios para acceder a recursos o funciones según lo especificado por sus permisos.

Esto puede provocar que siga caminos inesperados en el código, existiendo la posibilidad de dejar la aplicación en un estado no válido.

Es necesario revisar que se tiene éxito al acceder a un recurso o una funcionalidad del sistema desde la aplicación, y el uso adecuado del manejo del error si no se realiza correctamente. 

Realizar esta comprobación incluso si se está operando en un modo muy privilegiado, porque los errores o las condiciones de entorno aún podrían provocar un error.

Asignación incorrecta de privilegios

Controlar que un proceso no asigne privilegios inadecuados a un actor

Si un proceso asigna incorrectamente un privilegio a un actor en particular, se está permitiendo un espacio de control no deseado para ese actor.

Cacheo del resultado de una operación privilegiada

No cachear los resultados de una operación privilegiada

Un resultado cacheado no debe pasarse a un contexto en el que no tiene los permisos suficientes para generarlo.

Es necesario asegurar que el resultado generado en un contexto no tiene más permisos que los contextos donde puede devolverse.

Rutinas de autorización

Centralizar lar rutinas de autorización.

Mediante una biblioteca de comprobaciones de la autorización con las llamadas estandarizadas se centralizan las rutinas de control de acceso, por lo que si se encuentra algún fallo o vulnerabilidad, pueden arreglarse todas las ocurrencias realizando una única modificación en el código.

Con ello se minimiza el impacto de la vulnerabilidad que permite crear brechas de seguridad en una autorización replicada en el código.

Manejo de permisos por defecto

Aplicar el principio de mínimos privilegios, asociando los permisos más restrictivos por defecto

Es necesario asegurar que existe una compartimentación adecuada integrada en el diseño del sistema y que la compartimentación sirve para permitir y reforzar aún más la funcionalidad de separación de privilegios.

Los arquitectos y los diseñadores deben basarse en el principio de mínimo privilegio para decidir cuándo es apropiado utilizar y abandonar los privilegios del sistema.

Para ello, durante el arranque del programa, establezca explícitamente los permisos por defecto o asocie la configuración más restrictiva posible. Asimismo, establezca los permisos apropiados durante la instalación del programa. Esto evitará heredar permisos inseguros de todo usuario que instala o ejecuta el programa.

Cuentas de usuarios

Asignar mínimos privilegios en las cuentas de usuarios.

 

Las cuentas de usuario deben poseer únicamente los privilegios necesarios en la aplicación para realizar sus tareas asignadas. Bajo ningún concepto deben ser administradores, ni utilizar funciones que excedan de sus competencias.

Acceso a base de datos

Limitar las acciones de los usuarios sobre la base de datos

El acceso a base de datos debe realizarse mediante procedimientos almacenados parametrizados (o similar) para permitir que todos los accesos a una tabla sean revocados (por ejemplo, selección, eliminación, actualización, inserción, etc.) utilizando una cuenta de la base de datos con pocos privilegios. Esta cuenta no deben tener un rol SQL mayor al de “usuario” (o similar).