Tras las últimas vulnerabilidades de secuencias de comandos entre sitios (XSS), el FBI y la CISA han reforzado recientemente sus medidas de seguridad y se han centrado en mejorar la ciberresiliencia. Como era de esperar, las organizaciones a menudo no abordan los aspectos básicos, y así es como se producen las violaciones de datos.
Los ataques de secuencias de comandos entre sitios se producen cuando las aplicaciones y los servicios web no gestionan correctamente las solicitudes o las entradas, o no funcionan como se espera. Son peligrosos porque no solo afectan a las aplicaciones, sino también a los usuarios que las utilizan.
A continuación, le ofrecemos una guía sobre los ataques de secuencias de comandos entre sitios y todo lo que debe saber sobre este tema.
¿Qué son los ataques de secuencias de comandos entre sitios (XSS)?
Ninguna aplicación o sitio web es perfecto; todos tienen fallos ocultos. Los ataques de scripting entre sitios aprovechan estos fallos enviando código malicioso para provocar un mal funcionamiento. Estos ataques pueden permitir que un actor malintencionado se apropie de la identidad de la víctima e incluso se haga pasar por ella.
El script malicioso se esconde dentro de la aplicación web, por lo que no es fácil de detectar. Se mezcla con el código fuente de la aplicación, lo que hace imposible que los servicios verifiquen si proviene de fuentes no confiables. Entonces, ¿cuál es el resultado?
Los hackers obtienen acceso a las cookies, los tokens del sitio y otros datos confidenciales recopilados por su navegador web. Si su sitio web o aplicación entrega contenido a diferentes lugares, estos también se interceptan automáticamente. Los foros en línea y los tableros de mensajes de usuarios donde se pueden dejar comentarios debajo de las publicaciones también son susceptibles a esto.
Tipos de ataques de secuencias de comandos entre sitios (XSS)
Las vulnerabilidades XSS han creado gusanos y han socavado las medidas de seguridad de las aplicaciones en el pasado. Pueden propagar malware, suplantar credenciales y secuestrar sitios web de defensa.
Existen tres tipos principales de ataques de secuencias de comandos entre sitios (XSS). Antes de aprender a prevenir los ataques XSS, conozca las amenazas a las que se enfrenta. Son las siguientes.
1. XSS almacenado (XSS persistente)
Esta es una de las formas más básicas pero peligrosas de XSS. El XSS almacenado se refiere al código malicioso almacenado en bases de datos web cuando falta la validación de la entrada. El atacante inyecta el código a través de una vulnerabilidad de la aplicación web y lo almacena de forma permanente. La víctima puede ejecutar el script sin saberlo, y se envía una carga útil a su navegador web como código HTML. Una vez que ejecuta el script malicioso al cargar la página web, ya no hay vuelta atrás.
Un ejemplo clásico de esto es un comentario dejado en una entrada de blog. El atacante puede adjuntar una URL y conseguir que la víctima lea el comentario haciendo clic en él. Cuando el usuario interactúa, el código se ejecuta automáticamente.
2. XSS reflejado (XSS no persistente)
Cuando la carga útil de un atacante se convierte en parte de la enviada al navegador web, se transforma en un ataque XSS reflejado. La solicitud rebota en el navegador, de modo que la respuesta HTTP incluye la carga útil de la solicitud HTTP. Los hackers pueden utilizar una combinación de ingeniería social amenazas, enlaces maliciosos y otras tácticas de phishing para atraer a las víctimas y que realicen solicitudes al servidor. El único inconveniente de esta técnica es que el atacante necesita enviar cargas útiles individuales a las víctimas por separado. No pueden enviar cargas útiles de forma masiva; la mayoría de los ataques XSS reflejados se llevan a cabo en redes sociales.
3. XSS basado en DOM
El XSS basado en DOM consiste en piratear cuentas de usuario tomando código Javascript malicioso de una fuente controlable por el atacante. Este código se pasa a un sumidero que lo ejecuta dinámicamente y ejecuta el bloque de forma arbitraria. La URL del navegador es la fuente más común para estos ataques de secuencias de comandos entre sitios. El atacante también añadirá un enlace para enviar a las víctimas a páginas vulnerables con cargas útiles incrustadas en cadenas de consulta. También pueden fragmentar partes de la URL y manipular aún más a las víctimas desviándolas.
¿Cómo funciona el Cross-Site Scripting (XSS)?
El cross-site scripting funciona manipulando sitios web vulnerables y devolviendo código JavaScript malicioso a los usuarios. Cuando el atacante inyecta código malicioso y lo ejecuta desde el navegador de la víctima, puede comprometer por completo sus aplicaciones y cualquier interacción que se produzca con ellas.
Los iframes de origen cruzado no permiten a los usuarios llamar a la función de alerta. Se utilizan para realizar algunos de los ataques XSS más avanzados. El atacante también puede obtener el control de los privilegios y el acceso de los usuarios dentro de las aplicaciones web y apoderarse de los datos que contienen.
Los ataques y vulnerabilidades de secuencias de comandos entre sitios pueden permitir al atacante suplantar a la víctima y hacerse pasar por ella en toda la red. Pueden eludir las políticas de origen. Pueden segregar diferentes sitios web por completo.
A continuación, se ofrece una descripción simplificada de cómo funciona un ataque de secuencias de comandos entre sitios:
- El atacante le enviará un enlace malicioso. Cuando haga clic en él, se inyectará el código y el contenido dinámico se enviará al navegador web.
- Enviará una solicitud HTTP al servidor web del atacante. El secuestrador podrá entonces utilizar sus cookies robadas para suplantar su identidad.
- Podrá acceder a información confidencial y llevar a cabo ataques de ingeniería social más avanzados.
- Los ataques de secuencias de comandos entre sitios permiten a los atacantes eludir las políticas de mismo origen diseñadas para mantener separados los diferentes sitios web. Estos ataques son brutales y pueden dañar la reputación de su empresa. El adversario puede desacreditar a su organización cambiando su contenido y dañando o empañando la imagen de la empresa.
- Pueden difundir información errónea, cambiar las instrucciones de uso de sus sitios web y desviar a los usuarios.
Los ataques XSS son peligrosos, sobre todo si se dirigen a organismos gubernamentales, organizaciones sanitarias o empresas que proporcionan recursos vitales durante las crisis.
¿Cómo prevenir los ataques de secuencias de comandos entre sitios (XSS)?
Puede adoptar diferentes enfoques. Infórmese sobre ellos para saber cómo prevenir los ataques de secuencias de comandos entre sitios:
- La validación de las entradas de las aplicaciones y servicios web puede ayudar a prevenir los ataques de secuencias de comandos entre sitios (XSS). También puede utilizar un escáner de vulnerabilidades para comprobar si sus sitios web tienen otras vulnerabilidades de seguridad. Es una de las mejores formas de saber cómo prevenir automáticamente los ataques (XSS).
- La segunda forma de prevenir los ataques XSS es codificando los datos en la salida. Lo ideal es hacerlo antes de escribir los datos en una página. El tipo de codificación que deberá utilizar dependerá del contexto de escritura.
- Por ejemplo, los valores de cadena de JavaScript necesitarán un tipo de codificación diferente al de los valores en un contexto HTML. En un contexto HTML, debe convertir los valores que no están en la lista blanca en entidades HTML. Pero en un contexto de cadena JavaScript, debe asegurarse de que los valores no alfanuméricos se escapen a Unicode.
- Es posible que se necesiten varias capas de codificación, y este proceso debe aplicarse en el orden correcto. Debe incrustar las entradas del usuario en los controladores de eventos y tratar los contextos HTML y JavaScript. Existen numerosas formas de validar las entradas al llegar.
- Por ejemplo, si un usuario envía una URL y se devuelve en una respuesta, puede validarla comenzando con un protocolo de seguridad como HTTPS y HTTP. También puede validar los valores cuando un usuario los proporciona alfabéticamente o numéricamente. También puede validar de forma diferente restringiendo la entrada a un conjunto de caracteres esperado.
Aquí hay otros enfoques que también puede adoptar:
- Puede hacer una lista de todos los protocolos seguros que están permitidos en su sitio web. De este modo, su defensa bloqueará automáticamente los protocolos dañinos que no reconozca de forma predeterminada. Esto puede hacer que los ataques XSS no puedan ocultar valores no válidos intentando evadir las listas de bloqueo.
- No se debe permitir a los usuarios publicar marcas HTML, pero a veces es necesario. Puede filtrar las etiquetas dañinas implementando listas blancas. Estas guardarán las etiquetas seguras y filtrarán cualquier código malicioso asociado a las etiquetas de la lista negra. Cualquier etiqueta que no esté en sus listas blancas se considerará en la lista negra, a menos que usted la especifique.
- Tendrá que supervisar su sitio web para ver si hay actualizaciones de seguridad. Supongamos que planea utilizar bibliotecas JavaScript para realizar el filtrado y la codificación directamente desde el navegador del usuario. En ese caso, también puede prevenir los ataques XSS utilizando un motor de plantillas del lado del servidor. Este puede incrustar contenido dinámico en HTML y definir un código específico.
- También puede utilizar filtros con argumentos y definir el contexto. Esto puede ayudar a prevenir la mayoría de los casos de ataques XSS. Además, puede revisar estas funciones de escape para evaluar periódicamente si continuar con el motor de plantillas o el marco.
- PHP también tiene funciones integradas para codificar entidades, y puede llamarlas para escapar entradas siempre que sus valores estén dentro de un contexto HTML. Puede llamarlas con tres argumentos y necesita entradas de escape Unicode. PHP no proporciona ninguna API para escapar cadenas Unicode.
- Convierta sus cadenas en entidades HTML y, a continuación, llame a las funciones. Puede utilizar su codificador HTML personalizado para prevenir ataques XSS de JavaScript del lado del cliente.
Mejore su inteligencia sobre amenazas
Descubra cómo WatchTower, el servicio de caza de amenazas de SentinelOne, puede proporcionarle más información y ayudarle a superar los ataques.
Más informaciónAtaques de secuencias de comandos entre sitios (XSS): consejos de prevención (mejores prácticas)
Las mejores prácticas que puede establecer para prevenir los ataques XSS son:
- Limpie las entradas de los usuarios y los datos de salida mediante la codificación.
- Puede sustituir los caracteres especiales por valores codificados para que todos los datos se puedan procesar como texto en lugar de como código. El atacante no podrá inyectar un script malicioso si se trata de texto sin formato. Si aplica la codificación correctamente, ningún usuario se verá afectado de esa manera.
- Puede aplicar muchos tipos de codificación en función de la lógica empresarial o el tipo de aplicación, incluso incluyendo el tipo de datos que se almacenan y procesan. Existen diferentes métodos de codificación, como la codificación de entidades HTML, una de las medidas más básicas. También puede codificar valores de atributos.
- Otra buena práctica para prevenir los ataques XSS es filtrar los datos recibidos en el lado del cliente. El filtrado de datos elimina caracteres peligrosos como etiquetas, controladores de eventos HTML, elementos JavaScript maliciosos, etc.
- Puede devolver respuestas de páginas web utilizando una combinación de filtrado de entrada y salida. Este método es el más eficaz para mitigar los ataques XSS almacenados.
- La validación de las entradas de los usuarios es otra medida de seguridad. Por ejemplo, si se configuran los campos de entrada predeterminados para permitir tipos de datos de texto, los usuarios no podrán introducir números. Esto funciona bien en los formularios web; las entradas se pueden validar para evitar que los atacantes carguen scripts maliciosos a través de la autorización. Los navegadores web solo permiten el acceso a los recursos permitidos e ignoran todos los demás dominios. Los scripts inyectados no se ejecutarán incluso si un atacante logra descubrir vulnerabilidades de inyección XSS.
- Para evitar ataques de secuencias de comandos entre sitios en jQuery, puede pasar las entradas del usuario a un selector jQuery. La forma más común de hacerlo es utilizar la ubicación. Hash y pasar el selector para renderizar HTML. jQuery puede reconocer el problema y parchear la lógica del selector para comprobar si las entradas comienzan con un hash.
- Puede especificar recursos como imágenes y scripts que se pueden cargar desde el origen del sitio. Si un atacante inyecta cargas útiles XSS, no podrá cargar recursos que no pertenezcan al origen actual. El selector jQuery puede reducir significativamente las posibilidades de un ataque XSS o una vulnerabilidad.
Si tiene previsto pasar datos no fiables a sus selectores jQuery, asegúrese de escapar correctamente los valores utilizando la función js—escape. También puede mitigar los ataques XSS aprovechando las políticas de seguridad de contenido. Estas pueden ayudarle a controlar diversos aspectos de la gestión de scripts externos, como su carga y la ejecución de scripts en línea.
Ejemplos comunes de ataques XSS
Estos son algunos ejemplos comunes de ataques XSS en el mundo real:
- British Airways fue invadida por MageCart, un grupo de hackers de alto perfil, en 2018. El grupo explotó una vulnerabilidad XSS en la biblioteca JavaScript. Los datos de los clientes se enviaron a un servidor malicioso con un nombre de dominio similar al del sitio web oficial. Acabaron robando los datos de las tarjetas de crédito de más de 380 000 transacciones de reserva, lo que le costó a la aerolínea una enorme cantidad de dinero hasta que se descubrió la brecha, cuando ya era demasiado tarde.
- Fornite es un popular juego multijugador en línea que sufrió un ataque XSS. Una vulnerabilidad de SSO insegura redirigió a los usuarios a una página de inicio de sesión falsa, donde se robaron sus datos. Los jugadores también perdieron monedas virtuales dentro del juego y se filtraron los chats grabados de los jugadores.
- eBay tenía una vulnerabilidad XSS que permitía a los atacantes acceder completamente a las cuentas de los vendedores. Los secuestradores manipularon la posición de los anuncios de eBay y continuaron sus ataques incluso después de que eBay encontrara y solucionara la vulnerabilidad.
Conclusión
Los ataques de secuencias de comandos entre sitios se encuentran entre las amenazas de seguridad web más graves, ya que socavan la confianza en las plataformas en línea y comprometen los datos de los usuarios. Conociendo los tipos de ataques XSS y aplicando los mecanismos de prevención adecuados, los desarrolladores pueden proteger sus aplicaciones. Entre las medidas adecuadas se incluyen la validación de entradas, la codificación de salidas y la aplicación de políticas de seguridad de contenidos.
FAQs
Los ataques XSS consisten en inyectar scripts maliciosos en sitios web para permitir a los hackers acceder a datos confidenciales de los usuarios. Los ataques XSS aprovechan las vulnerabilidades de las aplicaciones web y suelen utilizar entradas de los usuarios o URL manipuladas.
Los desarrolladores pueden evitar los ataques XSS comprobando las entradas de los usuarios, codificando los datos de salida y permitiendo solo scripts maliciosos. Las auditorías de seguridad periódicas y las políticas de seguridad de contenidos también reducen los riesgos.
Los ataques XSS explotan las aplicaciones web inyectando scripts maliciosos que se ejecutan en los navegadores a los que acceden los usuarios, eludiendo los controles de seguridad y accediendo a información confidencial.
El XSS debe evitarse porque puede provocar fugas de datos, pérdidas económicas y daños a la reputación. También rompe la confianza del usuario y puede dar lugar a ataques de malware o phishing.
Las soluciones y herramientas incluyen escáneres de vulnerabilidades, cortafuegos de aplicaciones web y sistemas avanzados de detección de amenazas. Estos ayudan a detectar vulnerabilidades y a bloquear la ejecución de scripts maliciosos.
Sí. Un WAF puede bloquear los ataques XSS filtrando el tráfico e identificando los scripts maliciosos antes de que puedan interactuar con la aplicación.
Las pruebas XSS utilizan escáneres de vulnerabilidades y herramientas de pruebas de penetración para simular ataques y encontrar posibles puntos de entrada para scripts maliciosos.
Para protegerse contra las amenazas en constante evolución, se deben realizar análisis de seguridad para detectar vulnerabilidades XSS con regularidad, idealmente cada tres meses.

