shield-slash2. Access control

Access control

Access control ó Control de acceso, hace referencia a las limitaciones ó reglas que definen que ó quien es autorizado para realizar X acción o acceder a Y recurso. En el contexto de las aplicaciones web, el control de acceso depende el manejo de autenticación, sesiones y autorización:

  • Autenticación Confirma de que el usuario sea quien dice ser

  • Manejo de sesión Identifica peticiones HTTP subsecuentes con el mismo usuario

  • Autorización Determina cuando es permitido un usuario a realizar X acción

Las vulnerabilidades relacionadas a un Control de acceso roto, son comúnmente presentadas como vulnerabilidades críticas. El diseño y manejo de Controles de acceso es un problema complejo y dinámico que aplica restricciones empresariales, organizativas y legales a una implementación técnica. El diseño de Controles de acceso es una decision que debe ser hecha por humanos, así que el potencial de erro es alto.

Implicaciones

  • Escalamiento vertical de privilegios Una de las implicaciones que conlleva un Control de acceso roto, es la posibilidad de otorgar permisos elevados a un usuario común que regularmente no los requiere y que el ser otorgados sin regulación pueda llevar a un riesgo al negocio, estos permisos pueden incluir acceso a paneles administrativos, funciones privilegiadas como eliminar usuarios, entre otros.

  • Funcionalidades desprotegidas Dentro de lo más básico, la falta un Control de acceso puede generar que el usuario tenga un mal uso de funcionalidades sensibles que en un principio deberían ser restringidas a un administrador. Por ejemplo, la existencia de un panel de administración https://insecure-website.com/admin Puede que en un inicio no se tenga forma de acceder al panel de administración desde la página principal del sitio al no agregar links o elementos de redireccionamiento al panel, pero eso no lo hace inaccesible, cualquier usuario que conozca la existencia de dicho panel puede acceder a el si no se emplea un control de acceso. Una forma de acceder a dicho panel y que un usuario común o mal intencionado conozca de su existencia es observando dentro de https://insecure-website.com/robots.txt el archivo robots.txt se puede imaginar como un Código de conducta creado por el desarrollador para indicar a los bots como los web crawlers con que archivos no interactuar para evitar que sean indexados archivos o directorios. Aún sin la existencia de un archivo robots.txt existen formas de descubrir archivos y directorios ocultos, como el fuzzing ó bruteforcing. A la práctica de "proteger" un elemento al no ser mostrado de forma pública o evidente sin llegar a protegerlo con más medios se le denomina security by obscurity que puede ser útil en casos concretos, pero este no es uno de ellos

  • Control de acceso basado en parámetros Los Controles de acceso pueden basarse en parámetros, siempre y cuando estos sean robustos e impredecibles, donde sus valores no sean generados en secuencia o que basado en sus posibles valores se infieran los privilegios a los que van relacionados , algunos parámetros que pueden manejar el control de acceso pueden ser cookies, string parameters, hidden fields. Un ejemplo de un Control de accesso basado en parámetros débil puede ser aquella aplicación que el parámetro seleccionado para generar el control de acceso se encuentre dentro de los parámetros de su URL en una petición tipo GET, en conjunto a valores y privilegios relacionados predecibles como podría ser https://insecure-website.com/login/home.jsp?admin=false ó https://insecure-website.com/login/home.jsp?role=2, entre otros, donde se puede intuir o predecir los privilegios relacionados con los valores de los parámetros y el resultado al ser modificados.

  • Escalamiento horizontal de privilegios El escalamiento horizontal de privilegios ocurre cuando un usuario tiene la capacidad de ganar acceso a recursos de otros usuarios, recursos de carácter sensible o privado que en un inicio solo deben de ser accesibles por el usuario propietario. Como ejemplo https://insecure-website.com/myaccount?id=4 si un atacante obtiene el valor de id de otro usuario, dentro de este escenario podría ganar acceso a su cuenta modificando el valor del parámetro id, e incluso probar si este valor es secuencial o de alguna forma predecible para inferir el valor de otro usuario. Como medida de protección se sugiere generar valores únicos y aleatorios en la mayor medida posible como globally unique identifiers (GUIDs) de esta forma se prevé que un atacante adivine o infiera el valor de otro usuario.

References

https://portswigger.net/web-security/learning-paths/server-side-vulnerabilities-apprentice/access-control-apprentice/access-control/what-is-access-control arrow-up-right

https://www.cloudflare.com/learning/bots/what-is-robots-txt/arrow-up-right

Last updated