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 y el navegador de la víctima creerá que la secuencia de comandos es confiable y, por lo tanto, la ejecutará, otorgando al villano acceso a los tokens de sesión, cookies y otro tipo de información retenida por el navegador para ese sitio en particular.
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: cuando abrimos una URL manipulada o rellenamos un formulario adulterado, se envía el script malicioso al servidor web, que es devuelto al navegador del usuario sin ser comprobado.
Por ejemplo, puede devolver una versión falsa de la página de un banco online. - XSS almacenado: 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. - XSS basado en DOM: tiene lugar completamente en el lado del cliente.
El atacante no envía ningún script malicioso al servidor.
En pocas palabras, los ataques XSS basados en DOM ocurren cuando todo el flujo de datos maliciosos tiene lugar dentro del navegador de la víctima.
Este es un ataque común para robar cookies de inicio de sesión y secuestrar cuentas.
Cómo se inyecta el código malicioso
Para poder ejecutar código JavaScript malicioso en el navegador de la víctima, el atacante primero debe encontrar la manera de pasarlo de contrabando a un servidor o sitio web.
Por ejemplo, un delincuente podría utilizar un formulario de contacto con errores en su código fuente para intentar insertar una cadena maliciosa.
Cualquiera que visite el portal con el código malicioso incrustado, usando un navegador vulnerable, posiblemente acabará infectado.
Si el ataque está dirigido a un objetivo en particular, el atacante puede emplear algún tipo de ingeniería social, como por ejemplo el phishing para enviarle la URL que le llevará directamente al portal comprometido.
De forma muy resumida:
Los ciberdelincuentes eligen un sitio web objetivo y analizan sus funcionalidades en busca de complementos desactualizados y vulnerables, como por ejemplo:
- Barras de búsqueda.
- Código inseguro en las fuentes DOMXSS.
- Formularios de inicio de sesión.
- Sistemas de comentarios.
- Extensiones.
- Módulos.
Aprovechando alguno de estos complementos obsoletos, los villanos inyectan código malicioso en el sitio web, mediante algún lenguaje de programación como HTML o JavaScript.
El código malicioso inyectado se convierte en parte del «cuerpo» de la página web comprometiéndola.
La víctima solicita la página web a través de su navegador.
El servidor web proporciona al navegador de la víctima la página con la carga útil del atacante, como parte del código fuente de la página.
Cuando la víctima abre la página, su navegador ejecuta el script malicioso contenido en los archivos HTML.
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.
HTML5 y el almacenamiento web.
Ahora un sitio web puede almacenar datos en el navegador de un usuario para su uso posterior y, por supuesto, JavaScript puede acceder a ese almacenamiento a través de window.localStorage.
Intentos de phishing
Mediante JavaScript es posible crear una ventana emergente para recopilar credenciales con mensajes del tipo: «el firmware de su router se ha actualizado, por favor, vuelva a ingresar su contraseña para autenticarse».
También permite saber, entre otras cosas, el nombre del navegador web, su versión, los complementos instalados, el sistema operativo, la hora del sistema, el idioma, y la resolución de la pantalla.
¿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.
Evitar hacer clic en enlaces de correos electrónicos, sospechosos o publicados en foros y redes sociales, ya que pueden direccionarnos a páginas comprometidas.
Actualizar el sistema operativo y las aplicaciones con regularidad para evitar la explotación secundaria de vulnerabilidades.
Acceder a los sitios web directamente a través de su dirección genuina, y no mediante una fuente o, enlace, proporcionada por terceros.
Tener cuidado con las ventanas emergentes que aparecen de repente al navegar por un sitio web.
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.
Para protegerse contra Cross-site Scripting, también es muy importante escanear con regularidad los sitios web que visitamos mediante alguna utilidad en línea como Sucuri, uno de los escáneres de malware web más populares.
Quttera también puede comprobar un sitio web en busca de malware y vulnerabilidades.
Otra cosa a tener en cuenta es que el hecho de que una página web tenga un certificado de seguridad instalado (SSL) no garantiza que esté limpia de código malicioso.
Tampoco podemos estar seguros de que la página pertenece realmente al servicio al que queremos acceder.
Casi tres cuartas partes de todos los sitios de phishing usan certificados SSL.