Las Vulnerabilidades Web más Comunes

Las aplicaciones web pueden ser explotadas atacando vulnerabilidades bien conocidas. Aunque existen otras muchas vulnerabilidades relacionadas al ámbito web, algunas de estas deben ser consideradas como referencia fundamental.

Inyección

Las fallas de inyección se dan cuando datos no fiables del usuario son enviados hacia la aplicación web como parte de un comando o consulta. Los datos hostiles del atacante pueden engañar a la aplicación web, para ejecutar comandos indeseables o acceder de manera no autorizada hacia los datos. La inyección ocurre cuando un atacante alimenta entradas maliciosas dentro de la aplicación web, para luego actuar de una manera insegura. Este es uno de los ataques más antiguos contra las aplicaciones web, pero sigue siendo el rey de las vulnerabilidades porque es ampliamente difundida y muy dañina.

Las vulnerabilidades de inyección pueden surgir en todo tipo de lugares dentro de una aplicación web, los cuales permitan al usuario proporcionan entradas maliciosas. Algunos de los tipos más comunes para ataques de inyección, tienen como objetivo las siguientes funcionalidades.

  • Consultas SQL (Structured Query Language)
  • Consultas LDAP (Lightweight Directory Access Protocol)
  • Consultas de lenguaje de ruta XML (XPATH)
  • Comandos OS (Sistema Operativo)

Cuando la entrada del usuario es aceptada por la aplicación web, y procesada sin la limpieza apropiada ocurrirá la inyección. Esto significa el atacante puede influir en como las consultas y comandos de las aplicación web son construidas, y los datos a ser incluidos en los resultados. Este es un tipo de explotación muy poderoso.

Cross Site Scripting (XSS)

Cross Site Scripting (XSS) ocurre cuando la entrada del usuario es aceptada por la aplicación como parte de una petición, y luego es utilizada en la salida de una respuesta sin la codificación de salida implementada para validación y limpieza. XSS permite a los atacantes ejecutar scripts en el navegador de la victima, lo cual puede secuestrar sesiones, actuar como un capturador de teclado, redireccionar al usuario hacia sitios maliciosos, o cualquier cosa requerida por el atacante. Un atacante puede inyectar un script malicioso; frecuentemente JavaScript, pero también podría ser VBScript; el cual es interpretado en el navegador de la victima. Debido al script es parte de la respuesta desde la aplicación web, el navegador de la victima confía en esta y permite su ejecución.

Cross Site Scriping tiene dos categorías principales; reflejado y almacenado. Un XSS reflejado es más difundido en las aplicaciones web y es considerado menos dañino. La razón por la cual es considerado así no es por su capacidad de acción, sino por ser un ataque de un instante o momento, donde el payload enviado en una ataque XSS reflejado es únicamente válido en una petición. Cuando el usuario hace clic, el enlace conteniendo el script malicioso será abierto únicamente por la persona afectada por este ataque. Es generalmente un proporción de 1:1 entre el atacante y la víctima. El atacante puede enviar la misma URL maliciosa hacia millones de victimas potenciales, pero únicamente aquellos haciendo clic en el enlace serán afectados, no existe una conexión entre los usuarios comprometidos.

Un XSS Almacenado es más difícil de encontrar en las aplicaciones web, pero es más dañino porque es persistente entre múltiples peticiones, además puede explotar numerosos usuarios con un ataque. Esto ocurre cuando un atacante es capaz de inyectar un script malicioso dentro de la aplicación, estando disponible para todos los usuarios visitantes. Estará ubicado en la base de datos utilizada por la aplicación web, o cualquier otro mecanismo utilizado para almacenar las entradas. Como un usuario legítimo se hace una petición a la página, el exploit XSS se ejecuta en cada navegador. Esta es una proporción 1:Varios entre el atacante y la victima.

Ambos tipos de XSS tienen los mismos payloads; solo son entregado de diferente manera.

Gestión Inadecuada de la Autenticación y Sesión

Las sesiones son los únicos identificadores asignados a los usuarios después de autenticarse, y tienen muchas vulnerabilidades o ataques asociados con como estos identificadores son utilizados por la aplicación web. Las sesiones son también un componente clave del hacking al usuario web.

Las funciones de la aplicación web relacionadas a la gestión de la autenticación y sesión, no son frecuentemente implementadas de manera correcta, permitiendo a los atacantes comprometer contraseñas, claves, tokes de sesión, o explotar otras fallas en la implementación para asumir la identidad de otros usuarios. Funcionalidades de la aplicación web los cuales también abarca la autenticación es el reajuste de la contraseña, cambio de contraseña, y recuperación de la cuenta, por nombrar algunas.

Una aplicación web utiliza la gestión de sesión para mantener un seguimiento de las peticiones de cada usuario. Sin una gestión de sesión, se debería autenticarse cada vez se realiza una petición. Solo imaginar autenticarse después de cada búsqueda de un producto, luego nuevamente cuando se requiera añadir algo al carro de compras, y luego nuevamente cuando se requiera pagar, y luego nuevamente cuando se requiera ingresar la información sobre el pago. Por esto se creó la gestión de la sesión, de tal manera los usuarios únicamente se autentiquen una sola vez por visita, y la aplicación web deberá recordar los productos añadidos por el usuario al carro de compras. Las malas noticias son la gestión de la autenticación y sesión, son una idea tardía comparada con el Internet original. No era necesario gestión de la autenticación y sesión, cuando no había un carro de compras o pago. La Internet actual como la conocemos dio un giro y ahora utiliza la gestión de la autenticación y sesión.

Cross Site Request Forgery

Un CSRF ocurre cuando un atacante es capaz de enviar una petición maliciosa bien creada hacia un usuario autenticado, el cual incluye los parámetros (variables) necesarios para completar una petición válida a la aplicación web, sin el conocimiento de la victima (usuario).

Esto es similar a un XSS reflejado, en la cual un atacante debe inducir a la victima a realizar alguna acción en la aplicación web. Un script maliciosos podría ser ejecutado en el navegador de la victima, pero un CSRF puede también realizar una petición válida hacia la aplicación web. Algunos resultados de CSRF son cambiar una contraseña, crear un nuevo usuario, crear contenido en la aplicación web mediante un CMS. El atacante conoce exactamente cuales parámetros son necesarios para completar una petición, y la victima está autenticada en la aplicación, la petición se ejecutará como si el usuario lo hubiese hecho conscientemente.

Inadecuada Configuración de Seguridad

Esta categoría de vulnerabilidad específicamente trata con la seguridad (o ausencia de ella) de la pila completa para la aplicación web. Para aquellos no familiarizados con el termino “pila”, esto se refiere al sistema operativo, servidor web, y sistemas gestores de bases de datos, los cuales ejecutan y son accedidas por el código de la aplicación web. Este riesgo es incluso más problemático cuando las practicas para el fortalecimiento de la seguridad no son seguidas de la mejor manera para proteger el servidor web desde un acceso no autorizado. Entre las vulnerabilidades plagando un servidor web se incluyen.

  • Software innecesario o desactualizado
  • Servicios habilitados innecesarios
  • Políticas inseguras de cuentas
  • Mensajes de error con verbosidad

Una seguridad efectiva requiere tener definida una configuración segura, y desplegarla para la aplicación, frameworks, servidor de aplicación, servidor web, servidor de base de datos, y sistema operativo. Todas estas configuraciones deben ser definidas, implementadas, y mantenidas, pues muchas no son entregadas por defecto con seguridad. Esto incluye mantener todo el software actualizado, incluyendo librerías de código utilizados por la aplicación.

Fuentes:

https://www.owasp.org/index.php/Injection_Flaws
https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
https://www.owasp.org/index.php/Broken_Authentication_and_Session_Manage...
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
https://www.owasp.org/index.php/Top_10-2017_A6-Security_Misconfiguration

Sobre el Autor


Alonso Eduardo Caballero Quezada - ReYDeS
Instructor y Consultor en Hacking Ético, Forense Digital & GNU/Linux
Correo Electrónico: ReYDeS@gmail.com
Twitter: @Alonso_ReYDeS
LinkedIn: pe.linkedin.com/in/alonsocaballeroquezada
Facebook: https://www.facebook.com/alonsoreydes
Resumen de mi CV: http://www.reydes.com/d/?q=node/1