Los codificadores conquistan la seguridad: Share & Learn Series - Broken Access Control

Publicado el 09 de mayo de 2019
por Jaap Karan Singh
ESTUDIO DE CASO

Los codificadores conquistan la seguridad: Share & Learn Series - Broken Access Control

Publicado el 09 de mayo de 2019
por Jaap Karan Singh
Ver recurso
Ver recurso

Cuando construyes una aplicación empresarial, ya sea para uso interno o externo por parte de tus clientes, probablemente no permites que cada usuario realice todas las funciones. Si lo hace, puede ser vulnerable a un control de acceso roto.

Veamos qué es un control de acceso defectuoso, por qué es tan peligroso y cómo solucionarlo.

Comprender el control de acceso roto

El control de acceso roto se produce cuando el código de la aplicación no tiene las comprobaciones de seguridad o de acceso adecuadas. También puede ocurrir cuando una aplicación está mal configurada de alguna manera, permitiendo el acceso a funciones o páginas a las que el usuario no debería tener acceso.

Si usted maneja las finanzas de su empresa, puede tener acceso a depositar dinero en determinadas cuentas o a transferir dinero entre las cuentas de su empresa. Sin embargo, no debería tener acceso para retirar dinero de esas cuentas o transferir dinero a otras cuentas. Si no existen los controles de acceso adecuados, es posible que sus empleados puedan realizar más funciones de las necesarias.

Estas comprobaciones pueden realizarse dentro del código o en archivos de configuración. Por ejemplo, puede haber archivos de configuración XML que indiquen al marco de la aplicación web qué usuarios pueden acceder a qué páginas. Esto garantiza que los usuarios sólo puedan acceder a las funciones que están autorizados a utilizar.

Por qué es peligroso un control de acceso roto

Considere este ejemplo: Un atacante se ha dado cuenta de que su código de creación de cuentas de usuario puede ser manipulado, permitiendo al atacante crear un usuario administrador con una simple petición de correo. Pueden enviar una solicitud con el nombre de usuario y la contraseña, y luego cambiarla en el camino para incluir el rol de administrador en la URL como un parámetro, o en el cuerpo de la solicitud. El atacante entra en la aplicación y recibe instantáneamente derechos de administrador.

No siempre tiene que ser un atacante malicioso el que penetre en un sistema. Sin los controles de acceso adecuados, puede filtrarse información sensible que no debería compartirse entre departamentos. Imagínese que cualquier empleado de la empresa pudiera ver los datos de las nóminas de Recursos Humanos o los datos financieros. ¿Qué pasaría si cualquier empleado pudiera ver que se avecinan despidos por la mala situación financiera de la empresa? Esto podría ser perjudicial para la moral y la reputación de la empresa.

También podría perderse información sensible de los clientes. Las empresas suelen almacenar información personal de los clientes que utilizan sus servicios. Tenga cuidado de no exponerla accidentalmente por falta de control de acceso. Por ejemplo, si su sistema ofrece a los usuarios la posibilidad de solicitar su historial médico, ¿tienen también la posibilidad de solicitar y ver la información médica de otros? Si la URL contiene un número de identificación de cliente, los atacantes podrían incrementar ese número de identificación de cliente una y otra vez hasta encontrar uno que coincida con otro cliente, revelando así sus datos personales.

Derrotar el control de acceso roto

El control de acceso basado en roles (RBAC) es una herramienta muy eficaz para implementar un buen control de acceso. Aquellos que utilizan Active Directory pueden estar familiarizados con la idea de crear grupos y dar acceso a ciertos elementos a través del grupo, en lugar de al individuo. Las aplicaciones funcionan de la misma manera, utilizando roles para definir quién puede ver qué.

Esto tiene dos ventajas. En primer lugar, no es necesario cambiar una función cuando alguien deja el rol de administrador. Si alguien era previamente un administrador y ahora ya no debe serlo, entonces simplemente se coloca una nueva persona en el rol de administrador y se elimina a la persona anterior del rol. El código comprueba si el usuario tiene el rol de administrador en lugar de comprobar si cada usuario individual tiene acceso a una determinada página o función.

La segunda ventaja es evitar una pesadilla de mantenimiento. Un control de acceso tan granular que cada persona tenga asociaciones con todas las funciones o páginas posibles será imposible de gestionar con el tiempo. Los roles facilitan mucho las cosas, porque se pueden añadir varias personas a un rol. Un rol puede incluir a toda la empresa, mientras que otro puede tener sólo cinco personas. Esto hace que la gestión de los roles sea más eficiente, ya que habrá menos roles que gestionar. Una empresa de 10.000 personas podría tener sólo 100 roles en lugar de 10.000 veces el número de funciones de su aplicación. Investigue el marco de trabajo de su aplicación elegida para ver qué opciones existen para un control de acceso sólido.

También es fundamental utilizar el control de acceso a nivel de función. Proteja el acceso a todas las funciones exigiendo a los usuarios que pasen ciertas comprobaciones de control de acceso. Utilice el principio del mínimo privilegio, denegando el acceso por defecto y abriendo el acceso sólo cuando sea necesario. Puede ser difícil recordar la aplicación del control de acceso para cada función. Utilice un componente central para gestionar y aplicar el control de acceso.

Proteja sus funciones sensibles

Un control de acceso defectuoso puede dejar sus datos y su aplicación muy abiertos a los ataques y a la explotación. Los datos de los clientes que no están protegidos adecuadamente podrían dar lugar a una filtración masiva de datos, perjudicando su reputación y sus ingresos.

Un control de acceso roto también podría conducir a la toma de posesión de cuentas si los atacantes son capaces de acceder a la funcionalidad a la que no deberían acceder. Utilice un control de acceso de nivel funcional adecuado y mantendrá su aplicación a salvo de atacantes malintencionados, e incluso de personas con acceso interno accidental.

¿Cree que ya ha superado el nivel de acceso funcional? Ahora puedes desafiarte a ti mismo para reparar el control de acceso roto: [Comience aquí]

Ver recurso
Ver recurso

Autor

Jaap Karan Singh

¿Quieres más?

Sumérjase en nuestras últimas ideas sobre codificación segura en el blog.

Nuestra amplia biblioteca de recursos tiene como objetivo potenciar el enfoque humano de la mejora de la codificación segura.

Ver blog
¿Quieres más?

Obtenga las últimas investigaciones sobre la seguridad impulsada por los desarrolladores

Nuestra amplia biblioteca de recursos está repleta de recursos útiles, desde libros blancos hasta seminarios web, que le ayudarán a iniciarse en la codificación segura orientada a los desarrolladores. Explórela ahora.

Centro de recursos

Los codificadores conquistan la seguridad: Share & Learn Series - Broken Access Control

Publicado el 09 de mayo de 2019
Por Jaap Karan Singh

Cuando construyes una aplicación empresarial, ya sea para uso interno o externo por parte de tus clientes, probablemente no permites que cada usuario realice todas las funciones. Si lo hace, puede ser vulnerable a un control de acceso roto.

Veamos qué es un control de acceso defectuoso, por qué es tan peligroso y cómo solucionarlo.

Comprender el control de acceso roto

El control de acceso roto se produce cuando el código de la aplicación no tiene las comprobaciones de seguridad o de acceso adecuadas. También puede ocurrir cuando una aplicación está mal configurada de alguna manera, permitiendo el acceso a funciones o páginas a las que el usuario no debería tener acceso.

Si usted maneja las finanzas de su empresa, puede tener acceso a depositar dinero en determinadas cuentas o a transferir dinero entre las cuentas de su empresa. Sin embargo, no debería tener acceso para retirar dinero de esas cuentas o transferir dinero a otras cuentas. Si no existen los controles de acceso adecuados, es posible que sus empleados puedan realizar más funciones de las necesarias.

Estas comprobaciones pueden realizarse dentro del código o en archivos de configuración. Por ejemplo, puede haber archivos de configuración XML que indiquen al marco de la aplicación web qué usuarios pueden acceder a qué páginas. Esto garantiza que los usuarios sólo puedan acceder a las funciones que están autorizados a utilizar.

Por qué es peligroso un control de acceso roto

Considere este ejemplo: Un atacante se ha dado cuenta de que su código de creación de cuentas de usuario puede ser manipulado, permitiendo al atacante crear un usuario administrador con una simple petición de correo. Pueden enviar una solicitud con el nombre de usuario y la contraseña, y luego cambiarla en el camino para incluir el rol de administrador en la URL como un parámetro, o en el cuerpo de la solicitud. El atacante entra en la aplicación y recibe instantáneamente derechos de administrador.

No siempre tiene que ser un atacante malicioso el que penetre en un sistema. Sin los controles de acceso adecuados, puede filtrarse información sensible que no debería compartirse entre departamentos. Imagínese que cualquier empleado de la empresa pudiera ver los datos de las nóminas de Recursos Humanos o los datos financieros. ¿Qué pasaría si cualquier empleado pudiera ver que se avecinan despidos por la mala situación financiera de la empresa? Esto podría ser perjudicial para la moral y la reputación de la empresa.

También podría perderse información sensible de los clientes. Las empresas suelen almacenar información personal de los clientes que utilizan sus servicios. Tenga cuidado de no exponerla accidentalmente por falta de control de acceso. Por ejemplo, si su sistema ofrece a los usuarios la posibilidad de solicitar su historial médico, ¿tienen también la posibilidad de solicitar y ver la información médica de otros? Si la URL contiene un número de identificación de cliente, los atacantes podrían incrementar ese número de identificación de cliente una y otra vez hasta encontrar uno que coincida con otro cliente, revelando así sus datos personales.

Derrotar el control de acceso roto

El control de acceso basado en roles (RBAC) es una herramienta muy eficaz para implementar un buen control de acceso. Aquellos que utilizan Active Directory pueden estar familiarizados con la idea de crear grupos y dar acceso a ciertos elementos a través del grupo, en lugar de al individuo. Las aplicaciones funcionan de la misma manera, utilizando roles para definir quién puede ver qué.

Esto tiene dos ventajas. En primer lugar, no es necesario cambiar una función cuando alguien deja el rol de administrador. Si alguien era previamente un administrador y ahora ya no debe serlo, entonces simplemente se coloca una nueva persona en el rol de administrador y se elimina a la persona anterior del rol. El código comprueba si el usuario tiene el rol de administrador en lugar de comprobar si cada usuario individual tiene acceso a una determinada página o función.

La segunda ventaja es evitar una pesadilla de mantenimiento. Un control de acceso tan granular que cada persona tenga asociaciones con todas las funciones o páginas posibles será imposible de gestionar con el tiempo. Los roles facilitan mucho las cosas, porque se pueden añadir varias personas a un rol. Un rol puede incluir a toda la empresa, mientras que otro puede tener sólo cinco personas. Esto hace que la gestión de los roles sea más eficiente, ya que habrá menos roles que gestionar. Una empresa de 10.000 personas podría tener sólo 100 roles en lugar de 10.000 veces el número de funciones de su aplicación. Investigue el marco de trabajo de su aplicación elegida para ver qué opciones existen para un control de acceso sólido.

También es fundamental utilizar el control de acceso a nivel de función. Proteja el acceso a todas las funciones exigiendo a los usuarios que pasen ciertas comprobaciones de control de acceso. Utilice el principio del mínimo privilegio, denegando el acceso por defecto y abriendo el acceso sólo cuando sea necesario. Puede ser difícil recordar la aplicación del control de acceso para cada función. Utilice un componente central para gestionar y aplicar el control de acceso.

Proteja sus funciones sensibles

Un control de acceso defectuoso puede dejar sus datos y su aplicación muy abiertos a los ataques y a la explotación. Los datos de los clientes que no están protegidos adecuadamente podrían dar lugar a una filtración masiva de datos, perjudicando su reputación y sus ingresos.

Un control de acceso roto también podría conducir a la toma de posesión de cuentas si los atacantes son capaces de acceder a la funcionalidad a la que no deberían acceder. Utilice un control de acceso de nivel funcional adecuado y mantendrá su aplicación a salvo de atacantes malintencionados, e incluso de personas con acceso interno accidental.

¿Cree que ya ha superado el nivel de acceso funcional? Ahora puedes desafiarte a ti mismo para reparar el control de acceso roto: [Comience aquí]

Nos gustaría contar con su permiso para enviarle información sobre nuestros productos y/o temas relacionados con la codificación segura. Siempre trataremos sus datos personales con el máximo cuidado y nunca los venderemos a otras empresas con fines de marketing.

Enviar
Para enviar el formulario, habilite las cookies "Analytics". Siéntase libre de desactivarlas de nuevo una vez que haya terminado.