OWASP Top Ten 2017 (es)
A5:2017-Pérdida de Control de Acceso |
Languages: en de [es] |
Agente de amenaza / Vector de ataque | Debilidades de seguridad | Impacto | |||
---|---|---|---|---|---|
Específico de la Apl. |
Explotabilidad: 2 | Prevalencia: 2 | Detectabilidad: 2 | Técnico: 3 | ¿Negocio? |
La explotación del control de acceso es una habilidad esencial de los atacantes.
Las herramientas SAST y
DAST pueden detectar
la ausencia de controles de acceso pero, en el caso de estar presentes,
no pueden verificar si son correctos.
Es detectable utilizando medios manuales o de forma
automática en algunos marcos de trabajo que carecen de controles de acceso. |
Las debilidades del control de acceso son comunes debido a la falta de
detección automática y a la falta de pruebas funcionales efectivas por
parte de los desarrolladores de aplicaciones. La detección de fallas en el control de acceso no suele ser cubierto por pruebas automatizadas, ni estáticas ni dinámicas. |
El impacto técnico incluye atacantes anónimos actuando como usuarios o
administradores; usuarios que utilizan funciones privilegiadas o crean,
acceden, actualizan o eliminan cualquier registro. El impacto al negocio depende de las necesidades de la aplicación y de los datos. |
¿La aplicación es vulnerable?
Las restricciones de control de acceso implican que los usuarios no
puedan actuar fuera de los permisos previstos. Típicamente, las
fallas conducen a la divulgación, modificación o destrucción de
información no autorizada, o a la ejecución una función de
negocio fuera de los límites del usuario. Las vulnerabilidades comunes de control de acceso incluyen: * Sobrepasar las comprobaciones de control de acceso modificando la URL, el estado interno de la aplicación o HTML, utilizando una herramienta de ataque o una conexión vía API. * Permitir que la clave primaria se cambie a la de otro usuario, pudiendo ver o editar la cuenta de otra persona. * Elevación de privilegios. Actuar como un usuario sin iniciar sesión, o actuar como un administrador habiendo iniciado sesión como usuario estándar. * Manipulación de metadatos, como reproducir un token de control de acceso JWT (JSON Web Token), manipular una cookie o un campo oculto para elevar los privilegios, o abusar de la invalidación de tokens JWT. * La configuración incorrecta de CORS permite el acceso no autorizado a una API. * Forzar la navegación a páginas autenticadas como un usuario no autenticado o a páginas privilegiadas como usuario estándar. Acceder a una API sin control de acceso mediante el uso de verbos POST, PUT y DELETE. |
Cómo se previene
El control de acceso sólo es efectivo si es aplicado del lado del
servidor o en una API sin servidor, donde el atacante no puede modificar
la verificación de control de acceso o los metadatos. * Con la excepción de los recursos públicos, la política debe ser denegar de forma predeterminada. * Implemente los mecanismos de control de acceso una vez y reutilícelo en toda la aplicación, esto incluye minimizar el control de acceso HTTP (CORS). * Los controles de acceso al modelo deben imponer la propiedad (del dueño) de los registros, en lugar de aceptar que el usuario puede crear, leer, actualizar o eliminar cualquier registro. * Los modelos de dominio deben hacer cumplir los requisitos exclusivos de los límites de negocio de las aplicaciones. * Deshabilite el listado de directorios del servidor web y asegúrese que los metadatos/fuentes de archivos (por ejemplo de GIT) y copia de seguridad no estén presentes en las carpetas públicas. * Registre en bitácoras errores de control de acceso y alerte a los administradores cuando corresponda (por ej. fallas reiteradas). * Limite la tasa de acceso a las APIs para minimizar el daño de herramientas de ataque automatizadas. * Los tokens JWT deben ser invalidados luego de la finalización de la sesión por parte del usuario. * Los desarrolladores y el personal de QA deben incluir pruebas de control de acceso en sus pruebas unitarias y de integración. |
Ejemplos de escenarios de ataque
Escenario #1: La aplicación utiliza datos no validados en una
llamada SQL para acceder a información de una cuenta: pstmt.setString(1, request.getParameter("acct")); ResultSet results = pstmt.executeQuery( ); Un atacante simplemente puede modificar el parámetro ‘acct’ en el navegador y enviar el número de cuenta que desee. Si no se verifica correctamente, el atacante puede acceder a la cuenta de cualquier usuario: http://example.com/app/accountInfo?acct=notmyacct Escenario #2: Un atacante fuerza las búsquedas en las URL. Los privilegios de administrador son necesarios para acceder a la página de administración: http://example.com/app/getappInfo http://example.com/app/admin_getappInfo Si un usuario no autenticado puede acceder a cualquier página o, si un usuario no-administrador puede acceder a la página de administración, esto es una falla. |
Referencias
OWASP
* OWASP Proactive Controls: Enforce Access Controls * OWASP Application Security Verification Standard: V4 Access Control * OWASP Testing Guide: Authorization Testing * OWASP Cheat Sheet: Access Control Externos * CWE-22: Improper Limitation of a Pathname to a Restricted Directory (‘Path Traversal’) * CWE-284: Improper Access Control (Authorization) * CWE-285: Improper Authorization * CWE-639: Authorization Bypass Through User-Controlled Key * PortSwigger: Exploiting CORS misconfiguration |