¿Qué son los scripts entre sitios (XSS)?
Los scripts entre sitios (XSS) son un tipo de ataque de inyección de código en el que un adversario inserta código malicioso en un sitio web legítimo. A continuación, el código se ejecuta como un script infectado en el navegador web del usuario, lo que permite al ciberdelincuente robar información confidencial o hacerse pasar por el usuario.
Los foros web, los sitios de anuncios, blogs y demás sitios web que permiten a los usuarios publicar su propio contenido son los más susceptibles a los ataques XSS. A menos que la aplicación web revise, verifique y codifique la entrada, cualquier script malicioso incluido en el código se ejecutará automáticamente en los navegadores de otros usuarios. Este script puede acceder a las cookies del usuario, a los tokens de sesión o a otra información confidencial conservada en el navegador y empleada en el sitio. Incluso es posible que estos scripts reescriban el contenido de la página web infectada en el caso de ataques más avanzados.
Los ataques sin archivos basados en scripts, como los XSS, han experimentado un aumento en los últimos años debido a su capacidad de evasión. Estos ataques pueden eludir fácilmente las soluciones antivirus (AV) y los firewalls tradicionales, lo que hace que sea relativamente fácil llevarlos a cabo. Las organizaciones deben incluir la detección y prevención de XSS como parte de su estrategia general de ciberseguridad para proteger a los visitantes de su sitio web y reducir el riesgo de sufrir daños reputacionales.
¿Cómo funcionan los scripts entre sitios?
Es importante considerar que la mecánica del ataque XSS variará según el tipo de ataque que se implemente. Dicho esto, la mayoría de los ataques siguen el mismo proceso:
- El ciberdelincuente identifica una ubicación y un método para inyectar código malicioso en una página web. Para que esto sea posible, el sitio web debe permitir a los usuarios añadir contenido a la página a través de comentarios, publicaciones o campos de contacto. Si el ciberdelincuente tiene un objetivo definido, empleará técnicas de ingeniería social, como estrategias de phishing y suplantación de identidad, para incitar al usuario a visitar el sitio en cuestión. De lo contrario, el código queda a disposición de cualquier usuario que lo descubra.
- La víctima visita el sitio web con el código inyectado. Su dispositivo aceptará y ejecutará el script infectado porque lo considera parte del código fuente de un sitio fiable. Dado que el código no es visible y la mayoría de los usuarios de Internet no dominan los lenguajes de programación habituales, como JavaScript, es difícil que el usuario promedio detecte ataques XSS.
Tipos de ataques XSS y ejemplos
Existen tres tipos principales de ataques de scripts entre sitios:
1. XSS reflejado o no persistente
El script malicioso se ejecuta como parte de una solicitud HTTP activa y se "refleja" desde el servidor web al usuario.
Los ataques de XSS reflejado son la variedad más directa de los ataques de scripts entre sitios; ocurren cuando una aplicación web recibe datos de una solicitud HTTP y luego responde inmediatamente sin validar ni codificar los datos.
A continuación se ofrece un ejemplo de XSS reflejado:
https://insecure-website.com/status?message=All+is+great.Status: All is great.
Como la aplicación no procesa los datos en forma alguna, el ciberdelincuente puede fácilmente lanzar un ataque basado en scripts, como el siguiente, contra otros usuarios.
https://insecure-website.com/status?message=Status:
En un ataque de XSS reflejado, el script inyectado se presenta como un mensaje de error, un resultado de búsqueda o una acción similar a través de un enlace malicioso. Al hacer clic, este enlace ejecutará el script, lo que permite que el código inyectado viaje al sitio vulnerable y se "refleje" en el navegador del usuario. El navegador ejecuta el código porque considera que el sitio es una fuente fiable. A continuación, el script puede realizar cualquier acción disponible para el usuario en esa sesión, así como capturar cualquier dato que el usuario transmita durante la sesión.
2. XSS almacenado o persistente
El script malicioso se guarda de forma permanente en la base de datos de la aplicación web, como el registro de visitantes, el foro web o el campo de comentarios.
Los ataques de XSS almacenado o persistente ocurren cuando una aplicación web comparte datos de una fuente no fiable o no verificada en respuestas HTTP posteriores. En un ataque de scripts entre sitios almacenado, el script inyectado se guarda permanentemente en los servidores del objetivo, como en una base de datos, una publicación en un sitio de anuncios, un comentario u otra ubicación. Por ejemplo:
¡Hola, este es mi comentario!
Si el sitio no procesa los datos enviados, un ciberdelincuente puede fácilmente introducir contenido que incluye un script malicioso que infectará a otros usuarios. La víctima recupera el script malicioso del servidor cuando solicita la información almacenada.
3. XSS basado en modelo de objeto de documento (DOM)
La vulnerabilidad de seguridad se halla en el código del lado del cliente; se trata del código que se ejecuta en el navegador, en lugar del código del lado del servidor.
El XSS basado en DOM es un tipo de ataque de scripts entre sitios relativamente poco común. A diferencia de los dos otros tipos de ataque, cuyo objetivo es el código del lado del servidor, el ataque de XSS basado en DOM aprovecha vulnerabilidades de seguridad en el código del lado del cliente o el que se ejecuta en el navegador. Un ataque de esta naturaleza ocurre cuando una aplicación web procesa datos de JavaScript de una fuente no fiable de forma no segura. Los ataques de XSS basado en DOM siempre ocurren en JavaScript, ya que Java es el único lenguaje compatible con todos los navegadores.
En el siguiente ejemplo, una aplicación utiliza JavaScript para leer los valores de un campo de entrada. A continuación, escribe esos valores dentro de un elemento del HTML.
var search = document.getElementById('search').value;var results = document.getElementById('results');
results.innerHTML = 'You searched for: ' + search;
Cuando los ciberdelincuentes controlan el valor del campo de entrada, pueden insertar muy fácilmente el código malicioso que activa su script.
Buscaste: <img src="1"
Métodos de clasificación de XSS adicionales
Es importante destacar que, si bien cada uno de estos tres tipos de ataque es distinto, no son excluyentes. Existe cierta superposición entre cada categoría, donde el adversario puede emplear elementos de dos tipos de ataque en una sola ofensiva.
Por este motivo, la comunidad de ciberseguridad se refiere a los ataques XSS en función de dónde se explota el código: en el lado del servidor o en el del cliente. Así, pueden denominarse ataques XSS de servidor o de cliente.
Más información
Descubre cómo puedes monitorizar rápidamente las vulnerabilidades de los sistemas y las aplicaciones en tu organización.
Ver: Uso de Falcon Spotlight para la gestión de vulnerabilidades
Diferentes enfoques de scripts entre sitios
Un ataque XSS puede ocurrir en cualquier ubicación donde la entrada de una solicitud HTTP pueda llegar a la salida HTML. A continuación, se muestra una lista de tácticas comunes a las que los ciberdelincuentes pueden recurrir en un ataque XSS:
- Usar una etiqueta <script> para referenciar, insertar o incrustar código JavaScript malicioso.
- Explotar atributos de eventos de JavaScript, como onload y onerror, dentro de distintas etiquetas.
- Entregar una payload de XSS dentro de la etiqueta <body> a través de atributos de eventos de JavaScript.
- Aprovechar etiquetas <img>, <link>, <div>, <table>, <td> u <object> no seguras para referenciar script malicioso.
- Emplear la etiqueta <iframe> para incrustar una página web dentro de la página existente.
¿Cuáles son las consecuencias del XSS?
Los ataques XSS pueden ocasionar problemas importantes a las víctimas. En casos extremos, los ciberdelincuentes que emplean XSS pueden aprovechar las cookies del usuario para suplantar su identidad. El código también puede robar archivos y datos, o instalar malware en el dispositivo.
En el lado del servidor, los ataques XSS pueden provocar daños a la reputación de la organización host. Por ejemplo, al cambiar el contenido de un sitio corporativo, el ciberdelincuente puede difundir información errónea sobre las prácticas o actividades comerciales de la empresa. El adversario también puede manipular el contenido del sitio web para proporcionar instrucciones o indicaciones incorrectas a los visitantes. Este tipo de riesgo es especialmente peligroso si los hackers logran apoderarse de sitios web o recursos gubernamentales durante eventos de emergencia, lo que en última instancia desorienta a las personas sobre cómo proceder y adónde dirigirse en tiempos de crisis.
Desafortunadamente, puede ser difícil identificar los puntos flacos del XSS, sobre todo si el usuario carece de conocimientos de programación informática. Incluso los desarrolladores veteranos rara vez comprueban el código de sitios fiables. Una vez inyectado, suele ser muy complicado eliminar el código malicioso de la aplicación en los ataques de XSS almacenado.
Expert Tip
En este vídeo, CrowdStrike muestra cómo Falcon utiliza múltiples capacidades de detección para prevenir ataques basados en scripts.
Prevención del XSS
Es fundamental garantizar que tu organización no sea vulnerable ante ataques XSS. Los ataques basados en scripts y otros ataques sin archivos han aumentado en los últimos años porque pueden evitar que las herramientas de seguridad, nuevas o antiguas, los detecten; esto incluye el software antivirus o los firewalls.
Para mantener un sitio web seguro, los equipos web de las organizaciones deben coordinarse con el equipo de ciberseguridad o aliarse con un socio de ciberseguridad fiable para que los ayuden a evaluar el riesgo de ataques XSS en su sitio corporativo.
Administrar un sitio web seguro y protegido en el lado del cliente y del servidor, por lo general, requiere una solución de gestión de vulnerabilidades para monitorizar continuamente el sitio en busca de vulnerabilidades. Una excelente forma de hacerlo es contratar a un experto en SecOps; un miembro del equipo de ciberseguridad que trabajará con desarrolladores web y otras personas del equipo web para ofrecer prácticas recomendadas en materia de seguridad al desarrollar y mantener un sitio web. Este experto en seguridad también puede facilitar información sobre debilidades o vulnerabilidades críticas que podrían dejar el sitio web expuesto a ataques XSS.
Además, al trabajar con el equipo de ciberseguridad, debes considerar estas prácticas para crear un entorno web seguro y protegido:
- Realiza pruebas de penetración manuales en áreas seleccionadas que tengan una alta probabilidad de explotación.
- Limita la capacidad de los usuarios para enviar contenido al sitio web de la empresa y otros recursos, como foros, blogs o grupos de miembros.
- Si se permiten entradas de usuarios, filtra todo el contenido a la llegada empleando parámetros estrictos; codifica los datos en la etapa de salida.
- Evita que se inyecte código malicioso en respuestas que no deberían contener código HTML o JavaScript.
- Ofrece formación continua en materia de ciberseguridad y oportunidades de desarrollo a tu equipo de TI, así como a desarrolladores, programadores e ingenieros informáticos, a fin de garantizar que sean conscientes de los riesgos del XSS y puedan abordarlos adecuadamente desde el diseño.
Más información
Descubre nuestra gestión de vulnerabilidades moderna y nativa de la nube, con visibilidad instantánea y cero sobrecarga de escáner para superar con eficacia las brechas de colaboración en seguridad.