Qué es un ataque de XSS o Cross-Site Scripting, qué consecuencias tiene, qué tipos hay y cómo protegernos

Qué es el Cross-Site Scripting


Los ataques de Cross-Site Scripting ( XSS) consisten en inyectar códigos maliciosos en sitios web que suelen ser fiables. Un ataque de Cross-Site Scripting se produce cuando los ciberdelincuentes inyectan scripts maliciosos en el contenido del sitio web atacado, que luego se agrega al contenido dinámico que se envía al navegador de la víctima. El navegador de la víctima desconoce que los scripts maliciosos no son fiables y, por lo tanto, los ejecuta.

Al hacerlo, dichos scripts pueden acceder a las cookies, los tokens de sesión u otra información confidencial retenida por el navegador y que se utiliza en ese sitio. Los atacantes también pueden propagar malware mediante XSS, reescribir el contenido de sitios web, causar problemas en las redes sociales y recurrir al phishing para obtener credenciales de usuario.






Cómo funciona el Cross-Site Scripting


El Cross-Site Scripting manipula un sitio web vulnerable para que devuelva scripts maliciosos a los usuarios. Normalmente, se hace mediante JavaScript, pero puede utilizar cualquier lenguaje del cliente. Los ciberdelincuentes buscan sitios web con funciones vulnerables que aceptan la introducción de datos del usuario, como barras de búsqueda, espacios para comentarios o formularios de inicio de sesión. Los atacantes adjuntan su código malicioso en el sitio web de confianza, lo que básicamente engaña a los navegadores para que ejecuten el malware cada vez que se carga el sitio.

Dado que JavaScript se ejecuta en la página del navegador de la víctima, se pueden robar los detalles confidenciales de la sesión del usuario autenticado, lo que permite a los actores maliciosos atacar a los administradores de sitios y dañar sitios web.

Según cómo se inyecte el código, es posible que el contenido malicioso ni siquiera esté en la propia página web, sino que sea un elemento temporal que solo forma parte del sitio web en el momento del ataque. Esto puede dar la impresión de que el sitio web está en peligro cuando no es así.

Hay varias formas de desencadenar un ataque de XSS. Por ejemplo, la ejecución podría activarse automáticamente cuando se carga la página o cuando un usuario pasa el cursor por encima de elementos específicos de la página, como hipervínculos. En algunos casos, el XSS se produce de forma más directa, por ejemplo, mediante un mensaje de correo electrónico. Algunos ataques de XSS no tienen un objetivo específico: el delincuente simplemente ataca una vulnerabilidad en la aplicación o el sitio, aprovechándose de cualquiera que tenga la mala suerte de ser víctima.

Según la magnitud del ataque, es posible que las cuentas de los usuarios se vean afectadas, se activen troyanos y se modifique el contenido de la página, lo que engaña a los usuarios para que divulguen sus datos privados. Es posible que se divulguen las cookies de sesión, lo cual permitiría a un atacante hacerse pasar por usuarios reales y aprovecharse de sus cuentas privadas.

Si el ataque de Cross-Site Scripting tiene éxito, puede tener consecuencias terribles para la reputación de una empresa online y la relación con sus clientes. Desafortunadamente, los errores que permiten que se lleven a cabo los ataques de XSS son bastante generalizados. Los ataques de XSS pueden aprovechar las vulnerabilidades en varios entornos de programación, incluidos VBScript, Flash, ActiveX y JavaScript. Un ataque de XSS se dirige principalmente a JavaScript debido a estrecha integración de este lenguaje con la mayoría de los navegadores. Esta capacidad de vulnerar plataformas de uso común hace que los ataques de XSS sean peligrosos y estén muy extendidos.



Consecuencias de un ataque de XSS


Un atacante que aproveche una vulnerabilidad de XSS podría llevar a cabo la siguientes acciones maliciosas:

•Redirigir a los usuarios a un sitio web malicioso.
•Saber qué teclas pulsan los usuarios.
•Acceder al historial del navegador de los usuarios y al contenido del portapapeles.
•Ejecutar exploits en el navegador web (por ejemplo, bloquearlo).
•Obtener la información de las cookies de un usuario que ha iniciado sesión en un sitio web.
•Robar tokens de inicio de sesión, pudiendo así interactuar con la aplicación como si fuera la víctima aunque no sepa cuál es la contraseña.
•Obligar al usuario a enviar al servidor solicitudes controladas por él.
•Cambiar el contenido de una página.
•Engañar a la víctima para que desvele la contraseña de la aplicación u otras aplicaciones.
•Infectar a la víctima con otro código malicioso mediante una vulnerabilidad en el propio navegador web (normalmente, apropiándose del control del ordenador de la víctima).

En algunos casos, un ataque de XSS puede hacer que la cuenta de la víctima se vea totalmente afectada. Los atacantes pueden engañar a los usuarios para que introduzcan credenciales en un formulario falso y obtener así toda la información. Una vez que obtienen las credenciales de usuario, pueden utilizarlas en los ataques para llevar a cabo robos de identidad o fraudes económicos.




Tipos de ataques de XSS


Reflected Cross-Site Scripting


En un ataque de XSS reflejado el payload suele ser inyectado en un parámetro de la solicitud HTTP, para luego ser procesado por la aplicación web y finalmente desplegado en un punto determinado, sin algún tipo de validación o codificación de los caracteres. Se trata de la variedad de XSS más simple y el script malicioso que busca afectar el navegador de la víctima es fácilmente modificable, probablemente sin que el usuario note el ataque.

Como se puede observar en el siguiente ejemplo, se crea un enlace de apariencia normal sin un parámetro marcado y se observa un vector de ataque delimitado por el control del número de página del sitio.

https://insecure-site[.]example/blog/page/1/latest

El punto vulnerable en este caso es un parámetro que no es detectable a simple vista, pero alguna aplicación podría estar utilizando el valor proveniente de la URL para poder utilizarlo en el sitio, y así dar origen a la vulnerabilidad Reflected Cross-Site Scripting.







Stored Cross-Site Scripting


Esta variante tiene como característica que la aplicación web guarda el valor de entrada en un medio de almacenamiento y persiste el script inofensivo, hasta que el valor es recuperado por la aplicación y utilizado para conformar parte del documento HTML.

Los puntos de entrada más conocidos en los cuales se suele observar esta vulnerabilidad están en los comentarios de sitios web, entradas de blog, nombres de usuario, chats, formularios de contacto, detalle de alguna orden, etc. Y así como existen diversos valores de entrada, un XSS persistente podría llegar de distintos medios. La respuesta del protocolo HTTP es el más común, así como mensajes mediante SMTP, servicios de mensajería instantánea, notificaciones vía socket, por mencionar algunos.





DOM-based Cross-Site Scripting


El Document Object Model (DOM) es una interfaz de programación para representar la estructura de un documento web y conectarlo con un lenguaje de scripting. En este sentido, el DOM facilita la estructura de documentos como HTML o XML y permite a los programas modificar la estructura, estilo y contenido del documento. En el caso de un ataque de XSS basado en DOM el payload malicioso es ejecutado como resultado de la modificación del entorno DOM en el navegador de la víctima. Esto lleva a que el usuario ejecute código desde el lado del cliente sin saber que lo está haciendo.

A partir de la evolución de muchas librerías de JavaScript es cada vez más común que se implemente el proceso de los datos desde fuentes no confiables (insegura o sin la adecuada codificación de los datos) desde el lado del cliente, usualmente escribiendo estos datos en el DOM del sitio web.

Algunas funciones en JavaScript que pueden ser un indicador de un posible punto vulnerable son:
domain--write()--writeln()--innerHTML--insertAdjacentHTML--onevent--Element.outerHTML

Sin olvidar las librerías como JQuery, en donde utiliza métodos específicos para facilitar algunas funciones tradicionales del propio JavaScript, u otras librerías sin la adecuada codificación de los datos:
$.parseHTML()--add()--after()--animate()--append()--before()--constructor()--has()--html()--index()--init()--insertAfter()--insertBefore()--parseHTML()--prepend()--replaceAll()--replaceWith()--wrap()--wrapAll()--wrapInner()







Herramientas para identificar ataques y la explotación de Cross Site Scripting


Por suerte, existen muchas herramientas para identificar un ataque de Cross-Site Scripting e incluso la explotación utilizando scripts elaborados para diversos usos. Aquí es donde el framework Beef entra en acción con la amplia gama de scripts disponibles. A continuación se listan los más usuales:




Cómo evitar ataques XSS y proteger tu página web


Afortunadamente, existen medidas que puedes tomar para prevenir los ataques de cross-site scripting y proteger tu web de forma efectiva:

•Filtrar y validar los datos de entrada: Asegúrate de que todos los datos de entrada recibidos de los usuarios sean filtrados y validados adecuadamente. Utiliza listas de caracteres permitidos y rechaza cualquier entrada que contenga código o secuencias sospechosas para evitar males mayores.

•Escapar correctamente los datos de salida: Antes de mostrar los datos ingresados por los usuarios en las páginas web, asegúrate de ingresarlos como texto plano para que no se interpreten como un código ejecutable de forma automática. Esto evitará que el navegador interprete el código malicioso y los usuarios terminen sufriendo las consecuencias.

•Implementar encabezados de seguridad: Utiliza encabezados de seguridad HTTP, como el encabezado Content Security Policy (CSP), para limitar qué tipos de contenido pueden cargarse en tu web y desde dónde. Esto ayuda a prevenir ataques XSS al restringir las fuentes de scripts y otros recursos.

•Mantén tu software y tus bibliotecas actualizados: Asegúrate de mantener todos los software y bibliotecas utilizados en tu página web actualizados con las últimas versiones y parches de seguridad. Muchos ataques XSS ocurren debido a vulnerabilidades conocidas que se han corregido en versiones más recientes.



Para evitar ser víctima de un ataque de XSS, los usuarios deben hacer lo siguiente:

•Desactivar los scripts en páginas en las que no sean necesarios o deshabilitarlos por completo.
•Evitar hacer clic en enlaces de correos electrónicos sospechosos o publicaciones en foros de mensajes, ya que pueden redirigirlos a páginas peligrosas.
•Acceder a los sitios web directamente escribiendo la URL en el navegador en lugar de hacerlo mediante una fuente o un enlace de terceros.
•Mantener actualizado el software para beneficiarse de las correcciones de errores y los parches de seguridad más recientes. Actualizar el software a menudo reducirá de forma significativa las vulnerabilidades que hacen que un sitio o una aplicación sean propensos a sufrir ataques de XSS.
•Revisar las aplicaciones para ver cuáles se necesitan y cuáles no se utilizan tanto. Deshacerse de las aplicaciones que no se utilizan reduce la cantidad de posibles vulnerabilidades.
•Utilizar un antivirus

No hay comentarios:

Publicar un comentario