Los peligros de los ataques de Cross-Site Scripting (XSS)

By albert
25 Dic 2018

Las vulnerabilidades de tipo Cross-Site Scripting (XSS) son de las vulnerabilidades más frecuentes en las aplicaciones web. Según el OWASP Top 10, esta vulnerabilidad se encuentra en alrededor de dos tercios (2/3) de todas las aplicaciones.
Los ataques XSS son un tipo de inyección en la cual un atacante logra ejecutar código en los navegadores de los usuarios que acceden a un sitio web legítimo.

Tipos de ataques XSS

La criticidad de estas vulnerabilidades depende del tipo de XSS y de la información almacenada en la página web. Generalmente podemos hablar de 3 tipos de XSS:
XSS Reflejado: la aplicación utiliza datos sin validar, suministrados por un usuario y codificados como parte del HTML o JavaScript de salida. Un ejemplo de este tipo de XSS podría ser, si al introducir código JavaScript en el buscador de una página, este código es ejecutado en el navegador.
XSS Almacenado: la aplicación almacena datos proporcionados por el usuario sin validar ni sanear, los que posteriormente son visualizados por otro usuario o un administrador. Una página web sería vulnerable a este tipo de XSS si por ejemplo un usuario introduce como dirección de entrega código JavaScript y este código se ejecuta cuando un empleado accede al perfil del usuario.
XSS Basados en DOM: la aplicación procesa datos controlables por el usuario de forma insegura.  De forma similar al XSS Reflejado, un ejemplo de este ataque sería si en la URL escribimos código JavaScript y la web tiene un script que añade la URL sin sanear como parte del HTML. Al cargar la web el código JavaScript se ejecutará. La diferencia de este tipo de XSS con el XSS reflejado es que si miramos el código no veremos el JavaScript directamente en el HTML ya que todo sucede en el DOM.

Algunos ejemplos de ataques XSS

Hoy en día, el funcionamiento de los ataques de XSS es generalmente conocido. El problema más importante sobre estos ataques y aquello que es más necesario de entender es su impacto. Mediante la inyección de código JavaScript en el navegador de la víctima, un atacante puede realizar multitud de acciones que tienen un impacto crítico en el servicio ofrecido, con lo que es de vital importancia realizar auditorías de ciberseguridad para evitar cualquier problema.
Entre las acciones que puede realizar un atacante podemos encontrar:

  • Robo de sesiones: en el supuesto caso de que las cookies de sesión no estén protegidas, mediante un ataque XSS es posible leer la cookie de sesión de la víctima y enviarla a un servidor controlado por el atacante. Con esto el atacante podrá acceder a la web del mismo modo que el usuario y realizar todas las acciones que el usuario pueda realizar.
  • Robo de información sensible: mediante un ataque de XSS es posible ejecutar un JavaScript que lea las pulsaciones del teclado para robar las credenciales de acceso. Debido a que mucha gente repite las mismas contraseñas en diversas webs, estas credenciales podrán servir a un atacante para comprometer otros servicios de la víctima. En algunas webs donde se almacena o transmite información sensible, como tarjetas de crédito o información personal protegida por leyes como la GDPR, un atacante puede inyectar un script que modifique los formularios o scripts de toma de información para leer estos datos y enviarlos a un servidor controlado.
  • Minado de criptomonedas: debido al crecimiento de las criptomonedas, muchos atacantes aprovechan este tipo de vulnerabilidades para inyectar un JavaScript a los visitantes de la web vulnerable que tiene como propósito minar una criptomoneda y así obtener dinero directamente a través de los visitantes de la web.
  • Control del ordenador de la víctima: cuando la información del servicio no es de interés para los atacantes, pero sí los ordenadores de los visitantes, mediante la inyección de JavaScript se puede engañar al usuario para instalar software malicioso. En este caso se muestra una notificación indicando al usuario que debe instalar un software creado por el atacante para que el sitio web pueda funcionar correctamente.  Al instalar este software, el atacante toma el control de la víctima.
  • Cambio de la apariencia visual: cuando el objetivo de un atacante es dañar la reputación del sitio web vulnerable, este puede inyectar un JavaScript que cambie la apariencia visual de la web y muestre contenido no adecuado. En otros casos de cambio de apariencia visual el atacante puede cambiar la visualización para añadir anuncios por los cuales ganará dinero por clic.

Estos son solo ejemplos de posibles ataques, pero JavaScript permite realizar multitud de acciones en el navegador y por lo tanto, el ataque dependerá de la creatividad del atacante.
Es muy importante que los desarrolladores realicen formación sobre desarrollo seguro, para así concienciarse sobre los peligros de los ataques y conocer cómo evitarlos. Además, la utilización de herramientas de análisis de código estático ayuda a identificar estos problemas antes de su puesta en producción.
Si quieres que nuestros auditores revisen tu web para detectar vulnerabilidades que pueden afectar a tú negocio contacta con nosotros.

Autor: Adan Alvarez.
Ethical Hacking & Red Teamming – Cibersecurity Consultant  en A2SECURE.

Deja una respuesta