¿Qué es un ataque Cross-Site Scripting (XSS) y cómo podemos solucionarlo? | EasyDMARC

¿Qué es un ataque Cross-Site Scripting (XSS) y cómo podemos solucionarlo?

11 min de lectura

Las secuencias de comandos entre sitios son otra forma de cometer delitos cibernéticos que buscan explotar vulnerabilidades en un sitio web legítimo y confiable, este ataque cibernético es bastante común, y está generalmente dirigido a los navegadores de los usuarios finales con el fin de para robar datos, acceder a cuentas, entre otras acciones; también puede usarse para desconfigurar y comprometer tu sitio web, razón por la cual usamos este post para explicarte todo lo que necesitas saber sobre el cross-site scripting, cómo funciona, qué tipos existen, algunos ejemplos y formas de probarlo y prevenirlo.

¿Qué es el Cross-Site Scripting?

Los ataques de secuencias de comandos entre sitios o XSS, es un tipo de ataque de inyección mediante el cual los piratas informáticos inyectan scripts maliciosos en un sitio web fiable que no tiene los protocolos de seguridad adecuados debidamente configurados; los ataques XSS entre sitios web comienza cuando la víctima visita un sitio web corrupto y este actúa como vehículo de entrega para código malicioso.

Entonces, ¿cuál es el elemento de vulnerabilidad en las secuencias de comandos entre sitios? Cuando hablamos de ataques XSS, los vectores de inyección que son más comúnmente usados incluyen campos de entrada manejados por los usuarios, tales como cajas de comentarios, foros, tableros de mensajes, ventanas emergentes, etc. Cualquier sitio web es especialmente susceptible a este tipo de ataques cibernéticos si no filtra o desinfecta las vías de entrada para los usuarios.

Saber cómo corregir las vulnerabilidades de secuencias de comandos entre sitios Java es vital, ya que este lenguaje de programación es fundamental para la mayoría de las experiencias de navegación. Los ataques también pueden ocurrir a través de otros lenguajes, tales como HTML, Ajax, entre otros; los ataques XSS explotan las debilidades de los sitios web confiables, por lo que el navegador web de la víctima no reconoce la diferencia entre scripts legítimos y maliciosos, simplemente ejecuta el código que consigue como de costumbre, ejecutando sin saberlo el código malicioso de forma simultánea.

¿Cómo funciona el Cross-Site Scripting?

Ahora que sabes lo que son los ataques XSS, vamos a ver cómo funcionan las secuencias de comandos entre sitios: todo empieza cuando los ataques XSS eluden una medida de seguridad conocida como “Política del mismo origen” (o SOP). Cuando un sitio web no hace cumplir esta política, los piratas informáticos pueden inyectar scripts maliciosos fácilmente a través de las entradas de data usualmente destinadas para usuarios para lograr lo que se planteen, desde el robo de identidad, hasta infecciones con malware, y planes coordinados con el fin de causar estragos en páginas web específicas. 

Las secuencias de comandos entre sitios suelen constar de dos etapas específicas:

ETAPA 1: Los piratas informáticos identifican un sitio web con vulnerabilidades XSS y campos de entrada de usuario sin protección, acto seguido procede a inyectar código malicioso en el sitio web, el cual se comporta como código fuente en el navegador de la víctima.

ETAPA 2: Se produce un ataque de secuencias de comandos entre sitios, una vez que un usuario desprevenido visita el sitio web ya infectado; debido a que no se puede notar la diferencia, el navegador web de la víctima ejecuta el script malicioso junto con el código fuente legítimo. El criminal informático ahora puede robar cookies de inicios de sesión, credenciales de acceso y cualquier otro dato utilizado por el sitio web bajo ataque o que haya sido guardado por el navegador; en la mayoría de los casos, los blancos de estos eventos no detectan el ataque XSS hasta que es demasiado tarde.

Los piratas informáticos también pueden incorporar tácticas de ingeniería social, tales como correos electrónicos con phishing para perpetrar ataques más graves.

Es por esta razón que las empresas contratan a expertos de seguridad con experiencia en prevención de ataques de secuencias de comandos entre sitios, que tengan suficiente pericia para el uso de las herramientas adecuadas que se necesitan para protegerte de estos eventos.

¿Para qué son usados los ataques XSS?

Ahora sabes cómo funciona un ataque XSS de secuencias de comandos entre sitios, es necesario saber para qué se utiliza.

Los ataques de secuencias de comandos entre sitios son ejecutados principalmente para robar cookies, secuestrar sesiones de usuarios y comprometer cuentas de usuarios finales; los piratas informáticos pueden hacerse pasar por ti fácilmente y explotar tus datos, accediendo a tu geolocalización, el micrófono y la cámara web de tu equipo, los archivos, y otras utilidades en tus dispositivos.

Sin embargo, un ataque XSS no representa una amenaza solamente para el usuario final, ya que también puede causar daños irreversibles en sitios web completos, al modificar el contenido, desconfigurar las páginas web y extraer datos privilegiados. Hay varias otras razones para aprender a evitar las secuencias de comandos entre sitios, si un ataque de este tipo fuese exitoso puede permitir a los piratas informáticos hacer lo siguiente:

  • Acceder a información confidencial, incluidos datos bancarios y datos de inicio de sesión.
  • Robar o alterar el código fuente de un sitio web.
  • Instalar malware como spyware y virus en tus dispositivos, terminales o computadoras personales. 
  • Secuestrar tus cuentas de redes sociales o de cuentas bancarias.
  • Acceder a áreas privilegiadas de un sitio web

Impacto de los ataques XSS

El impacto de los ataques de secuencias de comandos entre sitios varía según el tipo de aplicación o sitio web que afecten, las funciones en las que creen la interrupción de servicio y el estado de la víctima. Si tales ataques afectan a tus usuarios, por lógica también afectarán tu sitio web. Las plataformas con usuarios anónimos e información pública se ven menos afectadas, mientras que los sitios web que contienen registros confidenciales o acceso restringido pueden verse más afectadas.

Ejemplo de secuencias de comandos entre sitios

Las plataformas de redes sociales son uno de los medios más usados por los piratas informáticos para iniciar ataques de secuencias de comandos entre sitios. Los criminales ciberneticos suelen agregar etiquetas HTML en la sección de comentarios y dirigen a los usuarios a hacer clic en estos enlaces.

Es por eso que es tan importante evitar hacer clic en enlaces que veas en los hilos de comentarios, especialmente en aquellos que dicen cosas como «Haga clic aquí para canjear cupones» o «Visita este enlace para obtener seguidores gratis», entro otros ejemplos.

Los criminales informáticos pueden robar las cookies de sesión de los visitantes y sacar el mayor provecho posible a sus cuentas de redes sociales.

¿Cuáles son los tipos de ataques XSS?

Existen tres tipos principales de vulnerabilidades de secuencias de comandos cruzadas: XSS persistente (almacenado), XSS reflectante y XSS basado en DOM.

XSS persistente (almacenado)

En los ataques XSS persistentes o almacenados, los sitios web no validan las entradas del usuario antes de mostrar el resultado, por lo que el código malicioso se almacena permanentemente en el sitio web de destino usando bases de datos, una publicación pública, un campo de comentarios o cualquier otra vía publica en redes sociales; esta carga útil proviene de la solicitud HTTP actual y se ejecuta automáticamente en los navegadores de los visitantes, sin necesidad de hacer clic en ningún enlace.

Estos tipos de ataques de secuencias de comandos cruzadas son los más dañinos, ya que las cargas útiles almacenadas infectan a todos los visitantes de la página web, el único lado positivo es que es fácil evitar este tipo de ataques, ya que los piratas informáticos suelen enviar mensajes de spam promocionando ofertas demasiado obvias usando páginas dañadas con el fin de generar más tráfico.

XSS reflectante

En los ataques XSS reflectantes o no persistentes, los scripts maliciosos se entregan a través de una solicitud HTTP y luego se reflejan en la respuesta HTTP del servidor al que está dirigido (tales como resultados de búsqueda, mensajes de error u otras entradas del lado del cliente). 

En un ataque no persistente, cada carga útil debe entregarse individualmente a la víctima, una vez que esto suceda, el código dañino llega al navegador de la víctima a través de una ruta diferente, generalmente como un enlace incrustado en sitios web de terceros, o en correos electrónicos con cargas de phishing, o mediante comentarios que una fuerte carga de ingeniería social en las redes sociales.

Estos tipos de ataques de secuencias de comandos entre sitios son simples y fáciles de perpetuar, por lo cual resultan muy atractivos para los actores maliciosos.

XSS basado en DOM

DOM es una abreviatura para el término Document Object Model (o Modelo de objeto de documento), es mejor conocido como una interfaz de programación de aplicaciones utilizada en HTML y XML. Un ataque XSS basado en DOM explota las vulnerabilidades en el código del lado del cliente al modificar el DOM, a través de una entrada de usuario sin desinfectar.

A menudo se entrega de la misma manera que un ataque XSS reflectante, a través de una URL cargada con un script malicioso, pero en lugar de utilizar una respuesta HTTP para ejecutar el código malicioso, este ataque ejecuta el código completamente en el navegador de la víctima.

¿Cómo detectar y probar vulnerabilidades XSS?

Cualquier sitio web que transmita entradas no validadas o incorrectas de las solicitudes de los usuarios es susceptible a ataques de secuencias de comandos entre sitios; es posible prevenir estas acciones mediante el uso de una herramienta, como un escáner de vulnerabilidades para sitios web con el fin de identificar de forma automática las debilidades en tus aplicaciones o sitios web.

También puedes probar las vulnerabilidades manualmente siguiendo estos pasos:

  • Identifica los vectores de entradas enviando solicitudes simples, como cadenas alfanuméricas en todos los puntos de entrada; este ejercicio te ayuda a detectar las puertas de enlace donde las entradas del usuario regresan en formas de respuestas HTTP.
  • Analiza las ubicaciones identificadas para entender si estos datos pueden explotarse con lenguaje JavaScript arbitrario.
  • Prueba los vectores de entrada para determinar el impacto de una vulnerabilidad y si estas deben ser retiradas, reemplazadas o filtradas por medio de caracteres HTML, puedes usar la lista de datos de entrada de OWASP para realizar este tipo de pruebas.

¿Cómo prevenir las secuencias de comandos entre sitios?

Cuando tu sitio web y los datos de tus usuarios son violentados, tu negocio, reputación y confiabilidad pueden verse brutalmente afectados, razón por la cual es esencial saber cómo prevenir los ataques de secuencias de comandos entre sitios; aquí te mostramos algunas maneras de prevenir estas amenazas a la seguridad:

Desinfecte todas las entradas del usuario

Filtrar los datos ingresados por los usuarios te ayuda a deshacerte del código que es potencialmente ejecutable y que puede conducir a un ataque de secuencias de comandos entre sitios; los expertos deben saber cómo funcionan los filtros PHP y Java para eliminar automáticamente el contenido no deseado de las secciones de entrada.

Validación de datos

La validación de datos mediante PHP confirma si los datos recibidos coinciden con la solicitud HTTP o no. Por ejemplo, este mecanismo se asegura de que no se agregue nada más en la columna del número del teléfono móvil de un formulario, es posible usar el comando filter_var para la verificación, una vez validados los datos, puedes evitar las entradas incorrectas en los campos de entrada de tu página web al rechazar la solicitud.

Usa una biblioteca

Puedes usar una biblioteca verificada para evitar que los navegadores traduzcan cualquier entrada de datos en código ejecutable, los caracteres como paréntesis y comas suelen indicar el inicio y el final de los guiones, estos se interpretan y etiquetan como «escapados», lo que garantiza que todos los datos estén seguros.

Pensamientos finales

JavaScript y otros lenguajes ayudan a crear sitios web interactivos, pero también permiten que los piratas informáticos aprovechen las vulnerabilidades de estos códigos de programación, los actores maliciosos inyectan código corrupto en los sitios web que ejecutan los navegadores instalados por las víctimas. Los ataques XSS se usan a menudo para robar cookies, secuestrar cuentas y explotar datos confidenciales, puedes utilizar una biblioteca de confianza, validar todos los datos de entrada y aplicar filtros para evitar ataques de secuencias de comandos entre sitios.