A01: El control de acceso roto (by OWASP)

Visión general

Subiendo desde la quinta posición, el 94 % de las aplicaciones se probaron en busca de algún tipo de control de acceso roto con una tasa de incidencia promedio de 3,81 %, y tiene la mayor cantidad de ocurrencias en el conjunto de datos contribuido con más de 318k.

Las Enumeraciones de debilidades comunes (CWE) notables incluidas son CWE-200: Exposición de información confidencial a un actor no autorizado , CWE-201: Inserción de información confidencial en datos enviados y CWE-352: Falsificación de solicitud entre sitios.

Descripción

El control de acceso aplica una política tal que los usuarios no pueden actuar fuera de sus permisos previstos. Las fallas generalmente conducen a la divulgación, modificación o destrucción no autorizada de todos los datos oa la realización de una función comercial fuera de los límites del usuario. Las vulnerabilidades comunes de control de acceso incluyen:

  • Violación del principio de privilegio mínimo o denegación por defecto, donde el acceso solo debe otorgarse para capacidades, roles o usuarios particulares, pero está disponible para cualquiera.

  • Omitir las comprobaciones de control de acceso mediante la modificación de la URL (alteración de parámetros o navegación forzada), el estado interno de la aplicación o la página HTML, o mediante el uso de una herramienta de ataque que modifica las solicitudes de API.

  • Permitir ver o editar la cuenta de otra persona, al proporcionar su identificador único (referencias de objetos directos inseguros)

  • Acceso a la API sin controles de acceso para POST, PUT y DELETE.

  • Elevación de privilegio. Actuar como usuario sin haber iniciado sesión o actuar como administrador cuando se ha iniciado sesión como usuario.

  • Manipulación de metadatos, como la reproducción o manipulación de un token de control de acceso JSON Web Token (JWT), o una cookie o un campo oculto manipulado para elevar los privilegios o abusar de la invalidación de JWT.

  • La configuración incorrecta de CORS permite el acceso a la API desde orígenes no autorizados/no confiables.

  • Forzar la navegación a páginas autenticadas como usuario no autenticado o a páginas privilegiadas como usuario estándar.

Como prevenir

El control de acceso solo es efectivo en el código del lado del servidor confiable o API sin servidor, donde el atacante no puede modificar la verificación de control de acceso o los metadatos.

  • Excepto para los recursos públicos, denegar por defecto.

  • Implemente mecanismos de control de acceso una vez y reutilícelos en toda la aplicación, incluida la minimización del uso compartido de recursos de origen cruzado (CORS).

  • Los controles de acceso al modelo deben imponer la propiedad de los registros en lugar de aceptar que el usuario pueda crear, leer, actualizar o eliminar cualquier registro.

  • Los modelos de dominio deben hacer cumplir los requisitos de límite comercial de aplicaciones únicas.

  • Deshabilite la lista de directorios del servidor web y asegúrese de que los metadatos del archivo (p. ej., .git) y los archivos de copia de seguridad no estén presentes en las raíces web.

  • Registrar fallas de control de acceso, alertar a los administradores cuando sea apropiado (por ejemplo, fallas repetidas).

  • Tasa de límite API y acceso al controlador para minimizar el daño de las herramientas de ataque automatizado.

  • Los identificadores de sesión con estado deben invalidarse en el servidor después de cerrar la sesión. Los tokens JWT sin estado deberían ser de corta duración para minimizar la ventana de oportunidad para un atacante. Para los JWT de mayor duración, se recomienda encarecidamente seguir los estándares de OAuth para revocar el acceso.

Los desarrolladores y el personal de control de calidad deben incluir una unidad de control de acceso funcional y pruebas de integración.

Ejemplos de escenarios de ataque

Escenario n.º 1: la aplicación utiliza datos no verificados en una llamada SQL que accede a la información de la cuenta:

 pstmt.setString(1, request.getParameter("acct"));
 ResultSet results = pstmt.executeQuery( );

Un atacante simplemente modifica el parámetro ‘acct’ del navegador para enviar cualquier número de cuenta que desee. Si no se verifica correctamente, el atacante puede acceder a la cuenta de cualquier usuario.

 https://example.com/app/accountInfo?acct=notmyacct

Escenario n.º 2: un atacante simplemente fuerza las búsquedas a las URL de destino. Se requieren derechos de administrador para acceder a la página de administración.

 https://example.com/app/getappInfo
 https://example.com/app/admin_getappInfo

Si un usuario no autenticado puede acceder a cualquiera de las páginas, es una falla. Si alguien que no es administrador puede acceder a la página de administración, esto es una falla.

Referencias

Lista de CWE mapeados

CWE-22 Limitación incorrecta de un nombre de ruta a un directorio restringido (‘Path Traversal’)

Recorrido de ruta relativa CWE-23

CWE-35 Recorrido de ruta: ‘…/…//’

CWE-59 Resolución de enlace incorrecta antes del acceso al archivo (“Seguimiento del enlace”)

CWE-200 Exposición de información confidencial a un actor no autorizado

CWE-201 Exposición de información confidencial a través de datos enviados

CWE-219 Almacenamiento de archivos con datos confidenciales bajo Web Root

CWE-264 Permisos, privilegios y controles de acceso (ya no debe usarse)

Problemas de permisos CWE-275

CWE-276 Permisos predeterminados incorrectos

CWE-284 Control de acceso inadecuado

CWE-285 Autorización incorrecta

CWE-352 Falsificación de solicitud entre sitios (CSRF)

CWE-359 Exposición de información personal privada a un actor no autorizado

CWE-377 Archivo Temporal Inseguro

CWE-402 Transmisión de recursos privados a una nueva esfera (“Fuga de recursos”)

CWE-425 Solicitud directa (‘Navegación forzada’)

CWE-441 Apoderado o intermediario no deseado (‘Adjunto confuso’)

CWE-497 Exposición de información confidencial del sistema a una esfera de control no autorizada

CWE-538 Inserción de información confidencial en un archivo o directorio accesible externamente

CWE-540 Inclusión de información confidencial en el código fuente

CWE-548 Exposición de información a través de la lista de directorios

CWE-552 Archivos o directorios accesibles a partes externas

CWE-566 Omisión de autorización a través de la clave principal SQL controlada por el usuario

CWE-601 Redirección de URL a un sitio que no es de confianza (“Abrir redirección”)

CWE-639 Omisión de autorización mediante clave controlada por el usuario

CWE-651 Exposición del archivo WSDL que contiene información confidencial

CWE-668 Exposición del recurso a la esfera incorrecta

CWE-706 Uso de nombre o referencia incorrectamente resueltos

CWE-862 Autorización faltante

CWE-863 Autorización incorrecta

CWE-913 Control inadecuado de recursos de código administrados dinámicamente

CWE-922 Almacenamiento inseguro de información confidencial

CWE-1275 Cookie confidencial con atributo de SameSite inadecuado

Más información: OWASP ORG

Relacionado

❌ React Native, crear aplicación como Netflix con Mario Díez

[no_toc] [expand title="Índice del Vídeotutorial"] 1. FlatList Horizontal 2. Componente Swiper 3. Menú Animado y Header 4. FlatList Grid 5. Más Flexbox, Tabs y Linear gradiantes 6. Reproductor de Vídeo 7. Share API 8. Animatable Header y NativeEvents 9. React Navigation 10. Header Múltiple con Animated 11. Modal con React Navigation 12. React Navigation con Redux 13. Servidor NodeJS con MongoDB para React Native 14. Conectando ¡SEGUIR LEYENDO!

❌ React Native con Mario Díez

[no_toc] [expand title="Índice del Vídeotutorial"] 1. Instalación 2. Introducción 3. Props y State 4. Fetch Data 5. ListView 6. Fech Data 2 7. Navigator IOS 8. Navigator 9. Flexbox 10. PropTypes 11. TabBarIOS 12. Formularios 13. AsyncStorage 14. Recorriendo Arrays con Map 15. Notificaciones Push 16. Notificaciones Push desde NodeJS 17. Barra de Búsqueda en ListView 18. Utilización de CameraRoll 19. Children o Props 20. Diferenciar ¡SEGUIR LEYENDO!

❌ React Native con Iván B. Trujillo

[no_toc] [expand title="Índice del Vídeotutorial"] 1. Primeros Pasos 2. Componentes, Botones y Alertas 3. Pantalla de Login, Navegador y Vistas 4. Navegación por Pestañas 5. Peticiones a API y ListView 6. Vista Detalles y Paso de Propiedades a Componente Hijo [/expand] [yotuwp type="playlist" id="PLuzQ5Ac_9_cI-ukaElfIFKXyhLsADBiJe" ] [expand title="Creador"] Editor del blog de Medium: Canarias JS [/expand]

❌ Javascript con Píldoras Informáticas

[no_toc] [expand title="Índice del Vídeotutorial"] 1. Presentación. Vídeo 1 2. Introducción. Vídeo 2 3. Sintaxis Básica I. Ubicación del código. Vídeo 3 4. Sintaxis Básica II. Estructuras Básicas. Vídeo 4 5. Sintaxis Básica III. Operadores Básicos. Vídeo 5 6. Sintaxis Básica IV. Operadores y prompt. Vídeo 6 7. Sintaxis Básica V Arrays, Matrices, Arreglos. Vídeo 7 8. Sintaxis Básica V. Arrays, Matrices, Arreglos II. Vídeo 8 ¡SEGUIR LEYENDO!

❌ Javascript con Falcon Masters

[no_toc] [expand title="Índice del Vídeotutorial"] 1. Introducción 2. Variables 3. Tipos de Dato 4. Arreglos 5. Metodos y propiedades para los Arreglos 6. Condicionales 7. Ciclo Fo 8. Ciclo While 9. Funciones 10. Ejercicio con Funciones y Formularios 11. Scope de Javascript (ámbito de las variables) 12. Metodos y propiedades para Cadenas de Texto 13. Introducción al DOM (Document Object Model) 14. Creando Nodos del DOM ¡SEGUIR LEYENDO!

Deja un comentario