Portada » Home » Buenas prácticas de desarrollo seguro: A5 Pérdida de Control de Acceso

Buenas prácticas de desarrollo seguro: A5 Pérdida de Control de Acceso

El control de acceso (o autorización) determina qué usuarios se comunican con qué sistemas y recursos dentro de su empresa. Cuando se pierde el control de acceso, cualquiera puede enviar solicitudes a sus aplicaciones de red. Esta pérdida significa que el acceso no autorizado a la funcionalidad y los recursos del sistema ha creado una vulnerabilidad explotable que abre a su empresa a resultados perjudiciales y potencialmente costosos.

Las restricciones de control de acceso existen para delimitar las acciones de los usuarios autenticados, pero éstas no siempre se aplican correctamente. Una de las habilidades esenciales de los atacantes es la explotación del control de acceso. De lograrlo, pueden acceder, de forma no autorizada, a funcionalidades y/o datos, cuentas de otros usuarios, ver archivos sensibles, modificar datos, cambiar derechos de acceso y permisos, y otras acciones relacionadas con la divulgación, modificación o incluso, destrucción de datos o del mismo sistema.

Las debilidades del control de acceso son comunes dado que no existen métodos automatizados para detectarlas, y si no se comienza por establecer, desde un principio, con claridad, qué usuarios tendrán qué permisos, es fácil caer en error o no detectar éstos. Además, la pérdida del control de acceso es a menudo un problema que surge en las aplicaciones o páginas web que han aumentado gradualmente de tamaño. En lugar de diseñar deliberadamente esquemas que regulen el acceso desde el principio, los desarrolladores los agregan a medida que crece la aplicación, a lo largo del tiempo. En los casos en que el control de acceso no está centralizado, esto a menudo resulta en un esquema muy complejo que es difícil de entender por completo. Un esquema complejo, a su vez, conduce a errores y vulnerabilidades y estas vulnerabilidades son altamente explotables.

Vulnerabilidades comunes de control de acceso son:

  • Elevación de privilegios
  • Manipulación de metadatos que permita la elevación de privilegios
  • Pasar por alto la comprobación de los privilegios al modificar la URL
  • La configuración incorrecta de CORS permite el acceso no autorizado a una API
  • Acceder a una API sin control de acceso mediante el uso de verbos POST, PUT y DELETE.
  • Forzar la navegación a páginas autenticadas como un usuario no autenticado o a páginas privilegiadas como usuario estándar
  • Permitir que la clave primaria se cambie a la de otro usuario, pudiendo ver o editar la cuenta de otra persona

Cómo prevenir la Pérdida de Control de Acceso?

Lo primero es diseñar la aplicación estableciendo políticas de acceso claras para cada archivo y tipos de usuarios/administradores. El control de acceso debe implementarse y ejecutarse a través de una matriz de control de acceso, que definirá las reglas para cada tipo de usuario. Estos puntos de acceso deben ser probados rigurosamente creando diferentes cuentas e intentando acceder a áreas no autorizadas.

Otras recomendaciones incluyen:

  • Comprobar los permisos de los archivos individuales, no solo los directorios.
  • Asegurarse de que el público no tenga acceso a los archivos de configuración, archivos predeterminados y scripts. Limitar los accesos al directorio y los archivos ejecutables también.
  • Restringir el almacenamiento en caché. El almacenamiento en caché del lado del cliente ayuda a acelerar los sitios web, pero otros pueden volver a acceder a esta información. Use encabezados http y metaetiquetas para evitar que se recarguen las páginas restringidas
  • No confíe en el «control de acceso a la presentación». La eliminación de un botón de navegación no evitará que atacantes lleguen allí.  Cada página debe estar autenticada.
  • Limitar los permisos de administración remota tanto como sea posible.

Finalmente, un ciclo de desarrollo seguro debe incluir una prueba de penetración antes de lanzar el sistema a producción y mientras éste esté operando.

Cómo detectar vulnerabilidades de Control de Acceso?

Tener una guía escrita que describa los diversos permisos necesarios es indispensable. Es altamente probable que si se carece de esta guía, la aplicación sea vulnerable a Pérdida de Control de Acceso!

Para detectar las posibilidades de Pérdida de Control de Acceso es necesario efectuar revisiones manuales del código, puesto que herramientas automatizadas son inefectivas para detectar estos errores en la programación. Es imprescindible, además, comprender cómo los usuarios y administradores se autentican y acceden al sitio (lo que suele suceder en un portal de acceso remoto), por lo que las pruebas de penetración hechas por una entidad independiente se hacen ultranecesarias, y éstas deben incluir una auditoría exhaustiva de todos los datos accesibles y sus permisos otorgados.

Cómo se usa la Pérdida de Control de Acceso en un ataque?

  • En 2012, hackers maliciosos obtuvieron acceso a los servidores de IRS (el SII estadounidense) en Carolina del Sur a través de una contraseña de administrador predeterminada, robando 3.6 millones de números de seguridad social.
  • Un sitio web que enumera su rol de usuario en la url, por ejemplo, http: // sitio web / usuario / cuenta. Un atacante simplemente puede cambiar la URL a http: // sitio web / administración / cuenta y eludir las contraseñas u otros controles.
  • Un ataque de fuerza bruta podría dañar un panel de administración si éste tuviese una contraseña débil o predeterminada.
  • Las referencias inseguras de objetos directos son variables que pueden ser manipuladas por el destinatario y utilizadas para recuperar más datos. Por ejemplo, un usuario puede obtener una lista de contraseñas o acceder a otros archivos con comandos simples en la ventana de la url.