top of page
Buscar

Cross-Site Scripting 101: Stored vs Reflected, Fortnite y limpieza general


Sgobba, J. P. (2021, July 13). Vulnerabilidad XSS (Cross Site Scripting): Qué es y cómo solucionarla. https://blog.hackmetrix.com/. https://blog.hackmetrix.com/xss-cross-site-scripting/


Los ataques de Cross-Site scripting (XSS) consisten en la inyección de código malicioso en sitios que son considerados seguros, pero son vulnerables. Los ataques ocurren cuando al atacante utiliza una aplicación web para enviar código malicioso al servidor de la aplicación web vulnerable, y al momento de que otro usuario hace un request el script malicioso es ejecutado en su máquina.


El navegador de la víctima no tiene manera de saber que el script es malicioso y no debería ser ejecutado, ya que viene 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 Cross-Site Scripting

Los ataques XSS almacenados se dan cuando el atacante almacena un script malicioso en un servidor. Puede ser por medio de una base de datos, en un foro, o en la sección de comentarios entre otras. La victima descarga el script malicioso del servidor cuando ingresa al sitio donde el atacante almaceno el contenido malicioso. Cuando la víctima ingresa al sitio, su navegador ejecuta el código malicioso automáticamente.




Los ataques XSS reflejados, también conocidos como ataques no persistentes son en los que el script inyectado es reflejado a otro usuario a través de la aplicación web. En un ejemplo proporcionado por portswigger el atacante hace una búsqueda y si los inputs no son limpiados, el atacante puede inyectar un script en este input que al momento de que otro usuario haga uso de este query que utilizo el atacante, este código malicioso será ejecutado en el navegador de la víctima. Otra manera de explicarlo es que se refleja el script malicioso de la aplicación web a el navegador de la víctima. El script esta incrustado en un enlace y será activado cuando la víctima le dé clic a este enlace.


La mayor diferencia entre los ataques XSS almacenados y reflejados es que los almacenados no necesitan inducir a que el usuario haga un request que contenga el exploit, el exploit ya está en la aplicación y solo se espera que el usuario lo encuentre.



Figure 2. Reflected XSS attack. From Imperva, n.d. (https://www.imperva.com/learn/application-security/reflected-xss-attacks/


Blind XSS ocurre cuando el payload del atacante es almacenado en el servidor y es reflejado a la víctima por medio del backend. Explicado por un ejemplo, el atacante inyecta el payload en una página de retroalimentación, cuando el administrador revisa esta retroalimentación, el payload se cargará en la aplicación, y de esta manera puede ser ejecutado en cualquier otra aplicación.


DOM-Based XSS también es conocido como client side XSS, y consiste en un ataque que se ejecuta al igual que en el reflected XSS por medio de un URL malicioso. La diferencia es que este ataque es ejecutado completamente en el navegador de la víctima modificando el DOM (Document Object Model). DOM es una plataforma e interfaz que permite a programas y scripts acceder y actualizar contenido y estilos. En un ejemplo presentado por Acutenetix, el atacante incrusta un script malicioso en un URL, y un atributo como el document.URL es poblado con el payload del atacante. Al momento de que el navegador actualiza el cuerpo de la página, el script malicioso será ejecutado. Afortunadamente muchos navegadores cifran caracteres como < y > causando que el ataque falle.


Ejemplos de la vida real

Entre 2015 y 2016 eBay presento una vulnerabilidad XSS. La página usaba un parámetro dentro de su url que redirigía a los usuarios a diferentes paginas dentro de su plataforma, pero el parámetro no era validado. Los atacantes aprovecharon esto para inyectar código malicioso en la página. Los atacantes obtuvieron control total de cuentas de vendedores, pudieron vender productos con descuento y robar detalles de pagos. Estos ataques continuaron hasta 2017.


Otro ejemplo más reciente de vulnerabilidades XSS ocurrió en 2019, se descubrió una vulnerabilidad en el famoso juego Fortnite. Al momento de autenticar cuentas, Fortnite permite a sus jugadores iniciar sesión a través de proveedores Single Sign-On como Facebook, Google, Xbox y cuentas de PlayStation. De acuerdo con los investigadores, la combinación de la vulnerabilidad XSS y un problema con la redirección de epic games permitía a los atacantes robar el token de autenticación a los usuarios, haciéndolos dar clic en un link malicioso.



Figure 3. Fortnite Flaws Allowed Hackers to Takeover Gamers' Accounts. From The Hacker News, 2019. (https://thehackernews.com/2019/01/fortnite-account-hacked.html)


¿Cómo prevenir los ataques de XSS?

El portal de PortSwigger identifico los cuatro puntos mas importantes para prevenir ataques cross site scripting.


La primera es limpiar los inputs que los usuarios envíen, filtrarlo de la mayor manera posible con lo cual se obtenga solo lo que es esperado.


Profundizando en este punto, hay tres pasos a seguir; primero se le hace escape al input del usuario, esto se refiere a convertir los caracteres recibidos, y que no puedan representados. Luego se valida el input del usuario, cualquier dato del exterior es potencialmente peligroso. Y la limpieza de los datos se llevaría removiendo datos no deseados como tags HTML o cualquier carácter peligroso.


El siguiente es que posterior a que el usuario emita los datos de los que el tiene el control, y se emiten las respuestas HTTP, la respuesta debe ser codificada para evitar que se interprete como contenido activo.


El tercer punto es el uso de headers como lo son Content-Type y X-Content-Type-Options, con esto se puede evitar recibir repuestas con contenido HTML o Javascript si es la intención.


Finalmente, recomiendan usar el Content Security Policy. Al igual que con el punto anterior este es un header que cualquier navegador moderno usa. Restringe la utilización de JavaScript, CSS u otras herramientas que el navegador carga.



Figure 4. Understanding XSS – input sanitization semantics and output encoding contexts. From Troy Hunt, 2013. (https://www.troyhunt.com/understanding-xss-input-sanitisation/)


Autora

Elisa Sosa

Ingeniero de Seguridad Junior


Referencias

  • Fortnite flaws allowed hackers to takeover gamers' accounts. The Hacker News. (2019, January 16). Retrieved July 22, 2022, from https://thehackernews.com/2019/01/fortnite-account-hacked.html

  • How to detect blind XSS vulnerabilities. Acunetix. (2019, July 5). Retrieved July 22, 2022, from https://www.acunetix.com/websitesecurity/detecting-blind-xss-vulnerabilities/

  • Inc., F. (n.d.). Content security policy reference. Content. Retrieved July 22, 2022, from https://content-security-policy.com/

  • JavaScript HTML DOM. JavaScript HTML dom. (n.d.). Retrieved July 22, 2022, from https://www.w3schools.com/js/js_htmldom.asp

  • Nidecki, T. A. (2022, July 21). Dom XSS: An explanation of dom-based cross-site scripting. Acunetix. Retrieved July 22, 2022, from https://www.acunetix.com/blog/articles/dom-xss-explained/

  • Protect from cross-site scripting attacks. IBM. (n.d.). Retrieved July 22, 2022, from https://www.ibm.com/garage/method/practices/code/protect-from-cross-site-scripting/

  • Reflected XSS: How to prevent a non-persistent attack: Imperva. Learning Center. (2022, February 15). Retrieved July 22, 2022, from https://www.imperva.com/learn/application-security/reflected-xss-attacks/

  • S, K. (n.d.). Cross site scripting (XSS). Cross Site Scripting (XSS) | OWASP Foundation. Retrieved July 22, 2022, from https://owasp.org/www-community/attacks/xss/

  • What is cross-site scripting (XSS) and how to prevent it?: Web security academy. What is cross-site scripting (XSS) and how to prevent it? | Web Security Academy. (n.d.). Retrieved July 22, 2022, from https://portswigger.net/web-security/cross-site-scripting

  • What is cross-site scripting? XSS cheat sheet. Veracode. (n.d.). Retrieved July 22, 2022, from https://www.veracode.com/security/xss

  • What is reflected XSS (cross-site scripting)? tutorial & examples: Web security academy. What is reflected XSS (cross-site scripting)? Tutorial & Examples | Web Security Academy. (n.d.). Retrieved July 22, 2022, from https://portswigger.net/web-security/cross-site-scripting/reflected

  • What is stored XSS (cross-site scripting)? tutorial & examples: Web security academy. What is stored XSS (cross-site scripting)? Tutorial & Examples | Web Security Academy. (n.d.). Retrieved July 22, 2022, from https://portswigger.net/web-security/cross-site-scripting/stored

  • XSS attack: 3 real life attacks and code examples. Bright Security. (2022, March 8). Retrieved July 22, 2022, from https://brightsec.com/blog/xss-attack/

  • imperva. (2022a). Reflected cross site scripting (XSS) attacks [Graph]. Reflected Cross Site Scripting (XSS) Attacks. https://www.imperva.com/learn/application-security/reflected-xss-attacks/

  • imperva. (2022b). What is stored cross site scripting [Figure]. Cross Site Scripting (XSS) Attacks. https://www.imperva.com/learn/application-security/cross-site-scripting-xss-attacks/

  • Khandelwal, S. (2019, January 16). Fortnite Flaws Allowed Hackers to Takeover Gamers’ Accounts [Graph]. Fortnite Flaws Allowed Hackers to Takeover Gamers’ Accounts. https://thehackernews.com/2019/01/fortnite-account-hacked.html

  • Understanding XSS – input sanitisation semantics and output encoding contexts. (2013, May 30). [Illustration]. Understanding XSS – Input Sanitisation Semantics and Output Encoding Contexts. https://www.troyhunt.com/understanding-xss-input-sanitisation/

194 visualizaciones0 comentarios

Entradas Recientes

Ver todo

Zero Trust Cybersecurity

Introducción En el mundo digital actual, donde las amenazas en línea son una gran preocupación, los métodos de seguridad tradicionales no siempre son suficientes. Ahí es donde entra en juego la cibers

Comments


bottom of page