Scripting entre sitios 101: almacenado frente a reflejado, Fortnite y desinfección general
Los ataques de scripting entre sitios (XSS) consisten en inyectar código malicioso en sitios considerados seguros pero vulnerables. El atacante utiliza una aplicación web para enviar código malicioso al servidor de aplicaciones web vulnerable, y cuando otro usuario realiza una solicitud, el script malicioso se ejecuta en su máquina.
El navegador de la víctima no tiene forma de saber que el script es malicioso y no debe ejecutarse, ya que proviene de una fuente confiable, de esta manera, el script del atacante puede acceder a cualquier cookie, token de sesión, o cualquier otra información sensible alojada en el navegador de la víctima.
Tipos de Scripting entre sitios
Ataques XSS almacenados se producen cuando el atacante almacena un script malicioso en un servidor. Puede ser a través de una base de datos, en un foro, o en la sección de comentarios, entre otros. La víctima descarga el script malicioso del servidor cuando ingresa al sitio donde el atacante almacenó el contenido malicioso. Cuando la víctima ingresa al sitio, su navegador ejecuta el código malicioso automáticamente.
Ataques XSS reflejados, también conocidos como ataques no persistentes, son aquellos en los que el script inyectado se refleja a otro usuario a través de la aplicación web. En un ejemplo proporcionado por portswigger, el atacante crea una búsqueda y si las entradas no están desinfectadas, el atacante puede inyectar un script en esta entrada, entonces cuando otro usuario haga uso de esta consulta que creó el atacante, este código malicioso se ejecutará en el navegador de la víctima. Otra forma de explicarlo es que el script malicioso de la aplicación web se refleja en el navegador de la víctima. El script está incrustado en un enlace y se activará cuando la víctima haga clic en este enlace.
El más grande diferencia entre los ataques XSS almacenados y reflejados es que los almacenados no necesitan inducir al usuario a realizar una solicitud que contenga el exploit, el exploit ya está en la aplicación y solo se espera que el usuario lo encuentre.
Ciego XSS ocurre cuando la carga útil del atacante se almacena en el servidor y se refleja a la víctima a través del backend. Por ejemplo, el atacante inyecta la carga útil en una página de comentarios, cuando el administrador revisa esta retroalimentación, la carga útil se cargará en la aplicación, y de esta manera, se puede ejecutar en cualquier otra aplicación.
XSS basado en DOM, también conocido como XSS del lado del cliente consiste en un ataque que se ejecuta al igual que en el XSS reflejado por medio de una URL maliciosa. La diferencia es que este ataque se ejecuta íntegramente en el navegador de la víctima modificando el DOM (Document Object Model). DOM es una plataforma e interfaz que permite que programas y scripts accedan y actualicen contenido y estilos. En un ejemplo presentado por Acutenetix, el atacante incrusta un script malicioso en una URL y un atributo como un documento. La URL se llena con la carga útil del atacante. En el momento en que el navegador actualice el cuerpo de la página, se ejecutará el script malicioso. Afortunadamente, muchos navegadores cifran caracteres como < and > provocar que el ataque falle.
Ejemplos de la vida real
Entre 2015 y 2016 eBay tenía una vulnerabilidad XSS. La página utilizaba un parámetro dentro de su url que redirigía a los usuarios a diferentes páginas dentro de su plataforma, pero el parámetro no fue validado. Los atacantes aprovecharon esto para inyectar código malicioso en la página. Los atacantes obtuvieron el control total de las cuentas de los vendedores, pudieron vender productos con descuento y robar detalles de pago. Estos ataques continuaron hasta 2017.
Otro ejemplo más reciente de vulnerabilidades XSS ocurrió en 2019, una vulnerabilidad descubierta en el famoso juego Fortnite. Al autenticar cuentas, Fortnite permite a sus jugadores iniciar sesión a través de proveedores de inicio de sesión único como cuentas de Facebook, Google, Xbox y PlayStation. Según los investigadores, la combinación de la vulnerabilidad XSS y un problema con la redirección de los juegos épicos permitió a los atacantes robar el token de autenticación de los usuarios, haciendo que hagan clic en un enlace malicioso.
¿Cómo prevenir los ataques XSS?
El portal PortSwigger identificó los cuatro puntos más importantes para evitar ataques de scripting entre sitios.
El primero es limpiar los insumos que envían los usuarios, filtrarlo tanto como sea posible únicamente obteniendo lo que se espera.
Profundizando en este punto, hay tres pasos a seguir; primero, escapar de la entrada del usuario, convirtiendo los caracteres recibidos para que no puedan ser ejecutados. Entonces cuando se valida la entrada del usuario, cualquier dato del exterior es potencialmente peligroso, la limpieza de los datos debe realizarse eliminando datos no deseados como etiquetas HTML o cualquier carácter peligroso.
El siguiente es que después de que el usuario emite los datos el usuario tiene el control y que se emiten las respuestas HTTP; la respuesta debe estar codificada para evitar que se interprete como contenido activo.
El tercero punto es el uso de encabezados como Content-Type y X-Content-Type-Options, con esto cualquier usuario puede evitar recibir respuestas con contenido HTML o Javascript si es la intención.
Por último, recomiendan usar la Política de seguridad del contenido. Similar al punto anterior, este es un encabezado que utiliza cualquier navegador moderno. Restringe el uso de JavaScript, CSS u otras herramientas que carga el navegador.
Referencias
Las fallas de Fortnite permitieron a los piratas informáticos apoderarse de las cuentas de los gamers. The Hacker News. (2019, 16 de enero). Recuperado el 22 de julio de 2022 de https://thehackernews.com/2019/01/fortnite-account-hacked.html
Cómo detectar vulnerabilidades XSS ciegas. Acunetix. (2019, 5 de julio). Recuperado el 22 de julio de 2022, de https://www.acunetix.com/websitesecurity/detecting-blind-xss-vulnerabilities/
Inc., F. (n.d.). Referencia de políticas de seguridad de contenido. Contenido. Consultado el 22 de julio de 2022 de https://content-security-policy.com/
JavaScript HTML DOM. JavaScript HTML dom. (n.a.). Recuperado el 22 de julio de 2022 de https://www.w3schools.com/js/js_htmldom.asp
Nidecki, T. A. (2022, 21 de julio). Dom XSS: Una explicación del scripting entre sitios basado en DOM. Acunetix. Recuperado el 22 de julio de 2022 de https://www.acunetix.com/blog/articles/dom-xss-explained/
Protéjase de ataques de scripting entre sitios. IBM. (n.a.). Recuperado el 22 de julio de 2022, de https://www.ibm.com/garage/method/practices/code/protect-from-cross-site-scripting/
XSS reflejado: Cómo prevenir un ataque no persistente: Imperva. Centro de Aprendizaje. (2022, 15 de febrero). Recuperado el 22 de julio de 2022 de https://www.imperva.com/learn/application-security/reflected-xss-attacks/
S, K. (sin d.). Scripting entre sitios (XSS) Scripting entre sitios (XSS) | Fundación OWASP. Recuperado el 22 de julio de 2022 de https://owasp.org/www-community/attacks/xss/
¿Qué es el scripting entre sitios (XSS) y cómo prevenirlo? : Academia de seguridad web. ¿Qué es el scripting entre sitios (XSS) y cómo prevenirlo? | Academia de Seguridad Web. (n.a.). Recuperado el 22 de julio de 2022 de https://portswigger.net/web-security/cross-site-scripting
¿Qué es el scripting entre sitios? Hoja de trampas de XSS. Veracode. (n.a.). Recuperado el 22 de julio de 2022 de https://www.veracode.com/security/xss
¿Qué es XSS (scripting entre sitios) reflejado? tutorial y ejemplos: Academia de seguridad web. ¿Qué es XSS (scripting entre sitios) reflejado? Tutorial y ejemplos | Web Security Academy. (n.a.). Recuperado el 22 de julio de 2022 de https://portswigger.net/web-security/cross-site-scripting/reflected
¿Qué es el almacenamiento de XSS (cross-site scripting)? tutorial y ejemplos: Academia de seguridad web. ¿Qué es el almacenamiento de XSS (cross-site scripting)? Tutorial y ejemplos | Academia de Seguridad Web. (n.a.). Recuperado el 22 de julio de 2022 de https://portswigger.net/web-security/cross-site-scripting/stored
Ataque XSS: 3 ataques de la vida real y ejemplos de código. Bright Security. (8 de marzo de 2022). Recuperado el 22 de julio de 2022 de https://brightsec.com/blog/xss-attack/
Imperva. (2022a). Ataques de scripting entre sitios (XSS) reflejados [Gráfica]. Ataques reflejados de Scripting entre sitios (XSS). https://www.imperva.com/learn/application-security/reflected-xss-attacks/
Imperva. (2022b). Qué es el scripting entre sitios almacenado [Figura]. Ataques de Scripting entre sitios (XSS). https://www.imperva.com/learn/application-security/cross-site-scripting-xss-attacks/
Khandelwal, S. (2019, 16 de enero). Las fallas de Fortnite permitieron que los hackers se apoderaran de las cuentas de los gamers [Gráfica]. Las fallas de Fortnite permitieron a los hackers apoderarse de las cuentas de los gamers. https://thehackernews.com/2019/01/fortnite-account-hacked.html
Comprensión de XSS: semántica de sanitización de entrada y contextos de codificación de salida. (2013, 30 de mayo). [Ilustración]. Comprensión de XSS — Semántica de desinfección de entrada y contextos de codificación de salida. https://www.troyhunt.com/understanding-xss-input-sanitisation/