Skip to content

¿Qué es y para qué sirve el XSS?

5 enero, 2019

Los scripts entre sitios (XSS) son un tipo de ataque de seguridad de inyección en el que un atacante inyecta datos, como un script malicioso, en el contenido de sitios web de confianza. Los ataques de secuencias de comandos entre sitios ocurren cuando una fuente no confiable puede inyectar su propio código en una aplicación web, y ese código malicioso se incluye con el contenido dinámico enviado al navegador de la víctima.

Los scripts maliciosos a menudo se entregan en forma de bits de código JavaScript ejecutados por el navegador de la víctima, pero las vulnerabilidades pueden incorporar código ejecutable malicioso en muchos otros idiomas, incluidos Java, Ajax, Flash y HTML. Los ataques de secuencias de comandos entre sitios pueden ser muy graves, pero mitigar las vulnerabilidades que permiten tales ataques es relativamente fácil.

Las secuencias de comandos entre sitios permiten a un atacante ejecutar secuencias de comandos maliciosas en el navegador de otro usuario. Sin embargo, el atacante no ataca directamente a la víctima; más bien, el atacante explota una vulnerabilidad en un sitio web que la víctima visita y consigue que el sitio web entregue el script malicioso para el atacante.

¿Cómo funciona el XSS?

Al igual que todos los ataques de inyección, XSS aprovecha el hecho de que los navegadores no pueden distinguir el marcado válido del marcado controlado por el atacante; simplemente ejecutan el texto de marcado que reciben. El ataque evita la Política del mismo origen, cuyo objetivo es evitar que los scripts que se originan en un sitio web interactúen con scripts de un sitio web diferente.

La misma política de origen requiere que todo el contenido de una página web provenga de la misma fuente. Cuando la Política del mismo origen no se aplica, un atacante puede inyectar una secuencia de comandos y modificar la página web para que se ajuste a sus propios fines, por ejemplo, para extraer datos que permitan al atacante hacerse pasar por un usuario autenticado o ingresar datos maliciosos. Código para que el navegador ejecute.

XSS se puede usar de varias maneras para causar problemas graves. El uso tradicional de XSS permite a un atacante robar cookies de sesión, lo que permite que el atacante pretenda ser el usuario (víctima). Pero no es solo robar galletas; los atacantes pueden usar XSS para propagar malware, desfigurar sitios web, crear estragos en las redes sociales, phish para obtener credenciales y, junto con técnicas de ingeniería social, perpetrar ataques más dañinos.

Tipos de vulnerabilidades de XSS

Hay tres categorías principales de vulnerabilidades de scripts entre sitios: XSS almacenados, XSS reflejados y XSS basados ​​en DOM.

XSS Almacenado

Es el tipo más dañino de ataque de scripts entre sitios. El atacante inyecta una secuencia de comandos, también llamada carga útil, que se almacena permanentemente en la aplicación de destino, como una base de datos. Por ejemplo, un atacante inserta un script malicioso en un blog, en una publicación del foro o en un campo de comentarios.

La carga útil XSS se servirá como parte de una página web cuando la víctima navegue a la página web afectada en un navegador. Luego, una vez que la víctima ve la página en un navegador, terminará ejecutando inadvertidamente el script malicioso.

XSS Reflejado

Es el tipo más común de vulnerabilidad de secuencias de comandos entre sitios. En este tipo de ataque, el atacante debe entregar la carga útil a la víctima. Por lo tanto, la secuencia de comandos de carga útil del atacante debe ser parte de la solicitud enviada al servidor web y reflejada para que la respuesta HTTP incluya la carga útil de la solicitud HTTP.

El atacante utiliza correos electrónicos de suplantación de identidad (phishing) y otros métodos de ingeniería social para atraer a la víctima a hacer una solicitud inadvertidamente al servidor que incluye la carga útil de XSS. La víctima luego ejecuta el script que se refleja y ejecuta dentro del navegador. Debido a que el XSS reflejado no es un ataque persistente, el atacante debe entregar la carga útil a cada víctima.

XSS basadas en DOM

Son un tipo avanzado de ataque XSS que se hace posible cuando la secuencia de comandos del lado del cliente de la aplicación web escribe datos proporcionados por el usuario al Modelo de objetos de documento (DOM).

La aplicación web luego lee los datos del DOM y los entrega al navegador. Si los datos no se manejan correctamente, el atacante puede inyectar una carga útil que se almacenará como parte del DOM. La carga útil se ejecuta cuando los datos se vuelven a leer desde el DOM.

Métodos de prevención de XSS

Las siguientes son las mejores prácticas conocidas para evitar el XSS:

Escapar de la entrada del usuario es una forma de evitar que las vulnerabilidades de XSS aparezcan en las aplicaciones. Esto significa tomar los datos que una aplicación ha recibido y garantizar que sean seguros antes de representarlos para el usuario. Escapar de la entrada del usuario evita que los caracteres clave en los datos que recibe una página web se interpreten como código ejecutable. Esto significa evitar que el navegador interprete los caracteres utilizados para indicar el inicio o el final del código ejecutable, y los traduce a «escapados». Por ejemplo, los caracteres de comillas, paréntesis, corchetes y algunos otros signos de puntuación a veces se usan para desactivar el código ejecutable; «escapar» de estos caracteres significa convertirlos de caracteres individuales que no se mostrarían en cadenas que el navegador interpreta como versiones imprimibles de los caracteres.

La desinfección de la entrada del usuario es otra forma de evitar ataques de secuencias de comandos entre sitios, lo cual es especialmente útil en los sitios que permiten el marcado HTML. Este método de prevención borra la limpieza de los datos de los caracteres potencialmente ejecutables, cambiando las entradas inaceptables del usuario a un formato aceptable y asegurando que los datos recibidos no puedan interpretarse como un código ejecutable.

La validación de entrada garantiza que una aplicación esté proporcionando los datos correctos y evitando que datos maliciosos dañen un sitio web, una base de datos y usuarios. Validar la entrada ayuda a evitar XSS en los formularios porque impide que un usuario agregue caracteres especiales en los campos de entrada de datos de la página web al rechazar la solicitud. La validación de entrada ayuda a reducir la posibilidad de efectos dañinos si un atacante descubre una vulnerabilidad de XSS.