Cross site scripting (XSS) es un tipo de ataque en el que un pirata informático inyecta scripts maliciosos en páginas web legítimas. Los ataques XSS implican la explotación de una vulnerabilidad en un servidor o una aplicación web, para enviar scripts maliciosos del lado del cliente al usuario desprevenido.
JavaScript es un lenguaje de programación que utilizan las páginas web y se ejecuta en el navegador del usuario.
Este código, del lado del cliente (dispositivo del usuario), es capaz de agregar muchas funcionalidades e interactividad a las páginas web, y se usa mayormente en las principales aplicaciones y plataformas CMS, como Joomla, WordPress o Drupal.
Algunos antivirus, también inyectan código JavaScript en los sitios web que visitamos, con la intención de comprobra su seguridad, pero también puede servir para saber nuestros hábitos de navegación.
Como funciona
- Un atacante inserta código malicioso en una página web legítima.
- El navegador de la víctima creerá que la secuencia de comandos es confiable y, por lo tanto, la ejecutará.
- En función del código malicioso, el villano tendrá acceso a los tokens de sesión, cookies u otra información retenida por el navegador.
En ciertos casos, estos scripts (también llamados payloads) pueden alterar el contenido HTML de una página web para modificar sus funciones.
Básicamente, existen tres tipos de ataque XSS.
Las principales diferencias entre ellos están en el modo en que un atacante manipula la aplicación web.
XSS reflejado (no persistente)
Cuando alguien pulsa en una URL manipulada se envía un script malicioso al servidor web, que es devuelto al navegador del usuario sin ser comprobado por la página de destino.
- Por ejemplo, un atacante envía un correo electrónico de phishing pidiéndole al receptor que haga clic en un enlace para visitar una página web.
- Aunque la primera parte de la URL parece legítima, el atacante ha incrustado un script en el final de la cadena de consulta.
- Cuando esta persona hace clic en el enlace, su navegador envía la solicitud al sitio web legítimo.
- Seguidamente, el sitio web devuelve el código malicioso al navegador del usuario, que ejecuta el script.
- El objetivo principal del script es robar las cookie de sesión del navegador de la víctima.
Se conoce como «no persistente» porque el script solo funciona en el navegador del usuario cuando se carga una página en concreto.
XSS almacenado o persistente
Se almacena en el servidor donde está alojada la página web. Las víctimas son atacadas a través de su interacción habitual con el sitio web.
- Por ejemplo, un sitio web puede incluir una sección de comentarios para interactuar con sus visitantes.
- Un atacante podría publicar un comentario con un script incrustado.
- Si este comentario no se «desinfecta», el código malicioso se guardará en la base de datos, de forma permanente para su uso posterior.
- Por lo tanto, a partir de ese momento, una vez que se cargue la página (por cualquier persona) el código malicioso estará al acecho.
- Cada vez que un visitante acceda a la página web, su navegador ejecutará este código, que podría robar cookies de sesión, o datos personales.
Se conoce como «persistente» porque el código malicioso acaba residiendo en la base de datos del sitio web.
Eso hace que los ataques XSS almacenados sean especialmente peligrosos: pueden afectar a todos los usuarios que visiten la página web comprometida.
XSS basado en DOM
- La interfaz DOM permite el procesamiento y manipulación del contenido de una página web mediante la lectura y modificación de documentos HTML y XML.
- Eso permite a los desarrolladores añadir contenido dinámico e interactividad a una página web mediante JavaScript, u otros lenguajes de programación.
Los ataques XSS basados en DOM introducen cambios maliciosos en el contexto DOM del navegador de la víctima, haciendo que el código se ejecute.
El atacante no envía ningún script malicioso al servidor. Se transmite a través de una URL que contiene el código malicioso.
Todo el proceso tiene lugar en el lado del cliente (navegador del usuario).
Las rutinas que el código inyectado puede ejecutar en el sistema de la víctima pueden variar.
Podrían ser tan inofensivas como una insidiosa y molesta imagen publicitaria que se muestra junto con el contenido legítimo de la página.
Pero también son capaces de redirigir al usuario a un sitio web infame, descargar malware en su sistema automáticamente, o robar información personal de la víctima, como credenciales de inicio de sesión.
Por qué XSS es tan peligroso
Mediante XSS, los ciberdelincuentes pueden convertir sitios web confiables en sitios desacreditados, causando daños y perjuicios no solo a las víctimas, sino también a la reputación del propietario de la página en la que confiaban.
Los sitios web comprometidos por XSS pueden, entre otras cosas, mostrar contenido inapropiado, descargar malware en el sistema del usuario o robar contraseñas.
Todo ello normalmente sin el conocimiento, ni el consentimiento, de sus propietarios o administradores.
¿Qué podemos hacer los usuarios?
Deshabilitar las secuencias de comandos en páginas donde no sean necesarias, o deshabilitarlas por completo.
Pero hay que tener en cuenta que deshabilitar JavaScript puede provocar que algunas aplicaciones web funcionen mal.
Otra opción es utilizar NoScript, una extensión para el navegador que evita que JavaScript y otros scripts de los sitios web que visitamos se carguen automáticamente en nuestro navegador.
Si lo anterior es inviable, lo mas sensato es examinar los enlaces sospechosos
Si vemos un enlace en un foro, una publicación, una red social, una página web, o donde sea, tenemos que pensarlo dos veces antes de hacer clic en el mismo
Es conveniente examinarlo para ver si despues del .com, .org, .net, .es u otro sufijo, aparece algo más .
Una cadena de texto inesperada después de la dirección de la página web, podría ser código JavaScript malicioso.