Cómo prevenir los ataques XSS

Evita la ejecución de scripts maliciosos y el robo de información de los usuarios bloqueando las entradas HTML, desinfectando los datos, protegiendo las cookies e implementando firewalls de aplicación web (WAF).

Metas de aprendizaje

Después de leer este artículo podrás:

  • Definir "XSS"
  • Entender cómo funciona XSS
  • Más información sobre cómo prevenir los ataques XSS

Copiar el enlace del artículo

¿Qué es XSS?

Cross-site scripting (XSS) es una táctica en la que un atacante inyecta código malicioso a través de uno o más scripts web en un sitio web o aplicación web legítimos. Cuando un usuario carga el sitio web o ejecuta la aplicación web, estos scripts se ejecutan en el navegador del usuario.

Los scripts podrían realizar diversas acciones maliciosas, como robar las cookies HTTP de los usuarios, los tokens de sesión u otra información confidencial. Un atacante podría utilizar esta información para hacerse pasar por los usuarios y obtener acceso no autorizado a cuentas en diferentes plataformas, como plataformas de redes sociales o sitios web bancarios. Además, los scripts podrían desfigurar el sitio web, redirigir a los usuarios a sitios maliciosos o extraer datos confidenciales de la aplicación web.

Para más información, consulta ¿Qué es Cross-site scripting?

¿Cuáles son los tipos de ataques XSS?

Los dos tipos más destacados de ataques XSS son el XSS reflejado (no persistente) y el XSS almacenado (persistente).

XSS reflejado (no persistente)

Los ataques XSS reflejados pueden ocurrir cuando un sitio web legítimo no valida o desinfecta la entrada del usuario. Estos ataques suelen empezar con ingeniería social, en el que el atacante envía correos electrónicos de phishing o deja mensajes en foros en línea con un enlace que incita a los usuarios a hacer clic en este. Normalmente, el enlace incluye la URL de un sitio web legítimo junto con un código malicioso.

Cuando un usuario hace clic en el enlace, su navegador envía una solicitud al sitio web legítimo, que refleja el código inyectado de vuelta al navegador del usuario. Dado que el sitio web no sanea adecuadamente la entrada, el script malicioso se ejecuta en el navegador del usuario.

El código podría copiar las cookies del usuario y enviarlas al atacante. Si el atacante adquiere una cookie de sesión, podría tomar el control de la sesión, lo que podría permitirle realizar compras fraudulentas, robar información bancaria o publicar spam en plataformas de redes sociales, entre otras acciones maliciosas.

Este tipo de XSS se denomina ataque "reflejado" porque el script malicioso se refleja fuera del servidor web y se ejecuta en el navegador del usuario. También se conoce como "no persistente" porque el script solo funciona en el navegador del usuario cuando se carga la página, no de forma continua.

XSS almacenado (persistente)

Los ataques XSS almacenados son más graves que los ataques XSS reflejados. Con el XSS almacenado, un script malicioso se almacena de forma permanente en el servidor de destino.

Los atacantes suelen llevar a cabo esta forma de XSS incorporando un script malicioso dentro de un campo de formulario, como un cuadro de comentarios, un perfil de usuario o cualquier campo de entrada que acepte y almacene contenidos del usuario. Una vez que se envía la publicación, el comentario o el formulario, el script se inyecta en la aplicación web y se guarda en la base de datos de la aplicación web. Cuando otros usuarios cargan la página afectada, el script almacenado se ejecuta en sus navegadores. Al igual que con los ataques XSS reflejados, el script podría robar cookies u otra información del usuario, que luego podría enviarse de vuelta al atacante.

Este tipo de XSS también se conoce como "persistente" porque la ejecución se produce cada vez que se accede a la página. Eso es también lo que hace que los ataques XSS almacenados sean especialmente peligrosos: pueden afectar a un gran número de usuarios sin ninguna interacción más allá de la simple visualización de una página web.

¿Cómo pueden los usuarios prevenir los ataques XSS?

Los usuarios individuales pueden tomar varias medidas para reducir el riesgo de ataques XSS:

Identificar correos electrónicos y mensajes sospechosos

Dado que muchos ataques XSS comienzan con estafas de phishing u otras tácticas de ingeniería social, los usuarios deben aprender a identificar correos electrónicos y mensajes sospechosos. Si notifican a los equipos informáticos o de seguridad adecuados, los usuarios pueden ayudar a detener los ataques XSS y abordar otros problemas de seguridad.

Examina los enlaces

Si los usuarios ven un enlace en un foro en línea o en una publicación social de alguien que no conocen o en el que no confían, deben pensarlo dos veces antes de hacer clic en el mismo. Aunque el enlace parezca legítimo, los usuarios deben proceder con precaución. Muchos enlaces que desencadenan ataques XSS parecen legítimos porque contienen URL legítimas. Sin embargo, los usuarios deben examinar el enlace completo, incluido todo lo que aparece después del .com, .org, .gov u otro sufijo. El texto inesperado después de la dirección de la página puede ser código malicioso.

¿Cómo pueden los desarrolladores prevenir los ataques XSS?

Los desarrolladores pueden desempeñar un papel fundamental en la prevención de los ataques XSS mediante la implementación de algunas prácticas recomendadas clave:

Validar entradas

Los desarrolladores pueden implementar reglas que impidan que los usuarios publiquen datos en una página o en un formulario a menos que cumplan ciertos criterios. Por ejemplo, si un formulario solicita un número de la seguridad social o un número de teléfono, los desarrolladores pueden crear una regla para que esta entrada solo contenga números, guiones o paréntesis. Para una prevención de ataques más eficaz, los desarrolladores pueden establecer reglas de validación que rechacen explícitamente las etiquetas o los caracteres que se utilizan habitualmente en los ataques XSS, como las etiquetas < script >.

Los desarrolladores también pueden evitar que los usuarios utilicen HTML en comentarios, publicaciones y entradas de formularios. El contenido HTML puede ser un medio para publicar scripts maliciosos u ocultar enlaces a URL que incluyan código malicioso.

Si las organizaciones quieren permitir que los usuarios publiquen contenido enriquecido, como texto con formato o imágenes, podrían incorporar Markdown (un lenguaje de marcado ligero) o habilitar el formato de texto enriquecido dentro de un "lo que ves es lo que obtienes" (WYSIWYG). Ambos métodos son formas más seguras de admitir contenido enriquecido.

Saneamiento de datos

Los desarrolladores pueden ayudar a prevenir los daños de los ataques XSS implementando un proceso para examinar los datos después de que se hayan publicado en el servidor web, pero antes de que se muestren a otro usuario. Incluso si los desarrolladores permiten el uso de HTML, por ejemplo, pueden sanear toda la entrada de HTML y filtrar cualquier código malicioso antes de que se ejecute en un navegador.

La codificación de salida y el "escapado" siguen un enfoque similar. La idea es transformar los scripts maliciosos u otro código que se encuentre en la entrada del usuario en texto normal antes de que se escriba algo en una página. La codificación de salida convierte el código a un formato diferente; el escape añade caracteres especiales al código (como barras invertidas o comillas). En cualquier caso, un navegador no interpretará el texto resultante como código y lo ejecutará. Mientras que el saneamiento filtra el código, la codificación de salida y el escape preservan el código y lo hacen inofensivo.

Revisa y prueba el código

Los desarrolladores deben integrar la seguridad en todo el desarrollo de aplicaciones web. Por ejemplo, deben realizar revisiones de código, centrándose especialmente en las áreas en las que se aceptan y muestran las entradas de los usuarios. También deben modelar y probar amenazas para identificar vulnerabilidades antes de que la aplicación entre en funcionamiento.

¿Cómo pueden los equipos de seguridad prevenir y responder a los ataques XSS?

Los equipos de seguridad pueden implementar varias prácticas recomendadas para ayudar a prevenir y responder rápidamente a los ataques XSS:

Garantizar las configuraciones de seguridad adecuadas del servidor web y de la aplicación

Los equipos de seguridad pueden tomar varias medidas para ayudar a garantizar que los servidores web estén configurados correctamente para bloquear los scripts maliciosos y evitar que el atacante robe las cookies de los usuarios:

Implementar una política de seguridad de contenido: los desarrolladores y los equipos de seguridad deben trabajar juntos para definir políticas de seguridad de contenido (CSP) sólidas para el sitio web y la aplicación web, e implementarlas en los servidores web. Una CSP es una capa adicional de seguridad que puede detectar y mitigar ciertos tipos de ataques. Para evitar los ataques XSS, restringe los scripts que se pueden ejecutar. Los servidores web se pueden configurar para que devuelvan encabezados de respuesta HTTP CSP que prohíban a los navegadores cargar scripts dañinos.

Cookies seguras: los equipos de seguridad pueden establecer reglas especiales sobre cómo los servidores web manejan las cookies para reducir la probabilidad de robo de cookies. Por ejemplo, pueden vincular las cookies a direcciones IP específicas. Como la mayoría de los usuarios tienen una dirección IP dinámica, las conexiones entre una dirección IP y las cookies no duran mucho. Como resultado, el atacante no puede robar y utilizar esas cookies.

Además, los equipos de seguridad pueden bloquear por completo el acceso de JavaScript a las cookies. Una forma de hacerlo es añadir la marca HttpOnly a las cookies al generarlas. La marca indica que las cookies pueden contener información confidencial del usuario, como el token de sesión o las credenciales de autenticación. Un navegador que admita la marca HttpOnly no revelará esa información.

Implementar un firewall de aplicación web

Un firewall de aplicación web (WAF) puede ofrecer una línea de defensa clave contra los ataques XSS. Un WAF, funcionando como un proxy inverso situado en un servidor delante de aplicaciones web, protege a esas aplicaciones supervisando y filtrando el tráfico HTTP entre las aplicaciones e Internet. Las organizaciones pueden establecer reglas WAF para inspeccionar las URL en busca de scripts maliciosos y bloquearlos para que no se reflejen a los usuarios. Las soluciones WAF con aprendizaje automático ofrecen una protección aún mayor al detectar los intentos de eludir las reglas e identificar las variaciones de los ataques conocidos.

Centrarse en la detección y respuesta al phishing

Dado que muchos ataques XSS comienzan con el phishing, los equipos de seguridad deben reforzar las defensas contra los ataques de phishing. Además de formar a los usuarios sobre cómo identificar correos electrónicos y mensajes sospechosos, los equipos de seguridad pueden implementar funciones de seguridad para bloquear el correo electrónico no deseado, utilizar un servicio de aislamiento de navegador para evitar la ejecución de malware, instalar una puerta de enlace web segura (SWG) para evitar que los usuarios descarguen archivos maliciosos, e implementar herramientas de seguridad del correo electrónico para detectar y bloquear los intentos de phishing en tiempo real.

Ejecutar pruebas de seguridad en la aplicación

Los equipos de seguridad deben probar las vulnerabilidades en los entornos de producción. Los equipos pueden ejecutar pruebas de penetración manuales o utilizar escáneres XSS automatizados.

Desarrollar un plan de respuesta a incidentes

A pesar de los amplios esfuerzos de prevención, las organizaciones pueden seguir siendo objeto de ataques XSS. Tener un plan de respuesta a incidentes es esencial para una recuperación rápida. Tal plan debe incluir estrategias para supervisar las actividades de las aplicaciones web y tomar medidas cuando se produzcan eventos sospechosos. A continuación, los equipos deben analizar las causas fundamentales e identificar los métodos de ataque. Cuando termine el ataque, deben aplicar las lecciones aprendidas para aumentar las capacidades de seguridad, actualizar las políticas y revisar las vulnerabilidades en las aplicaciones web.

¿Cómo ayuda Cloudflare a prevenir los ataques XSS?

Cloudflare tiene varios productos y funciones que pueden ayudar a las organizaciones y a los usuarios a prevenir los ataques XSS:

  • Cloudflare WAF puede proteger aplicaciones web de ataques XSS, ataques DDoS, inyección de código SQL y otras amenazas comunes.
  • Cloudflare Email Security ayuda a bloquear los correos electrónicos de phishing que se pueden utilizar para desencadenar ataques XSS
  • Cloudflare Browser Isolation evita la ejecución de scripts maliciosos en los ordenadores de los usuarios
  • Los CSP de Cloudflare pueden ayudar a detectar y mitigar los ataques XSS, así como la inyección de contenido/código, la incrustación de recursos maliciosos y el uso de iframes maliciosos (secuestro de clics).

Más información sobre el WAF de Cloudflare.