2010-08-20 9 views
9

Wikipedia ofrece information about one of the most common scenarios para la explotación de una cruz lugar del ataque de secuencias de comandos reflejado - el uso de un cierto grado de ingeniería social para inducir a los usuarios confiados para hacer clic en un enlace malicioso:¿Cuáles son los posibles vectores de ataque para scripts reflejados en sitios cruzados?

  1. Alice menudo visita un sitio web en particular, que es organizada por Bob . El sitio web de Bob permite a Alice iniciar sesión con un par de nombre de usuario/contraseña y almacena datos confidenciales, como la información de facturación .
  2. Mallory observa que el sitio web de Bob contiene una vulnerabilidad XSS reflejada.
  3. Mallory crea una URL para explotar la vulnerabilidad y envía un correo electrónico a Alicia , invitándola a hacer clic en el enlace para obtener la URL bajo pretextos falsos. Esta URL apuntará al sitio web de Bob, , pero contendrá el código malicioso de Mallory, que reflejará el sitio web.
  4. Alice visita la URL proporcionada por Mallory mientras está registrado en el sitio web de Bob .
  5. El script malicioso incrustado en la URL ejecuta en el navegador de Alice, como si viniera directamente desde el servidor de Bob (esta es la real vulnerabilidad XSS ). La secuencia de comandos se puede usar para enviar la cookie de sesión de Alice al Mallory. Mallory puede usar la cookie de sesión para robar la información sensible disponible para Alice (credenciales de autenticación, información de facturación , etc.) sin el conocimiento de Alice.

Ahora, esto es por lo general tiende a ser muy buen ejemplo cuando el sitio web pasa a ser una aplicación de la página impulsada - la vulnerabilidad es explotada por conseguir al usuario a presentar una carga maliciosa a la aplicación (que es más importante , al emitir una solicitud GET al iniciar sesión) que se refleja en la respuesta.

¿Existen vectores de ataque más interesantes, especialmente los que se deben tener en cuenta cuando la aplicación utiliza mucho AJAX y la mayoría de las solicitudes se realizan a través de HTTP POST?

EDITAR

En caso de que no estaba claro, me gustaría saber los diferentes tipos de ataques de vectores aplicable a reflejaba ataques XSS, sobre todo cuando el nivel del lado del cliente de la aplicación se implementa de forma diferente . Las aplicaciones basadas en páginas tendrían un vector de ataque que implica las solicitudes HTTP GET emitidas por un usuario, pero sería interesante saber cómo funciona esto para las aplicaciones de cliente grueso, especialmente las que usan objetos XMLHttpRequest que emiten solicitudes HTTP POST. Diferentes mecanismos utilizados en la representación del lado del cliente obviamente justificarán el estudio de diferentes vectores de ataque. En algunos casos, puede que no haya ningún vector de ataque aplicable; la pregunta se expresa para provocar tal respuesta.

+0

me gustaría sugerir Serverfault podría ser un lugar más apropiado para esta cuestión o, tal vez, http://webmasters.stackexchange.com/ –

+0

@ricebowl, pero ¿por qué me lo puso en serverfault? No estoy buscando consejos para reforzar un servidor. Intento deducir un conjunto de vectores de ataque en una aplicación web. Eso es algo que las personas versadas en seguridad pueden responder. Tal como lo veo, esta es una pregunta sobre el diseño de seguridad: ¿la vulnerabilidad al XSS reflejado debe tomarse en serio si una aplicación se escribe de una manera particular? –

+0

No estoy sugiriendo completamente que SF * sea * el lugar correcto, solo estoy viendo los dos votos cercanos que sugieren migrar * a * SF. Personalmente, creo que webmasters.stackexchange.com sería una mejor opción, aunque cualquiera de ellos sería, en mi opinión, una mejor opción que SO, precisamente por el enfoque basado en el servidor de esos sitios (y el enfoque de la aplicación web). de esta pregunta). Los usuarios de esos sitios pueden, obviamente, sentirse de manera diferente que yo. –

Respuesta

3

Sí, de hecho hay algunas variaciones en el ataque reflexivo XSS. Mayormente notablemente es el Samy Worm. En resumen, Samy usó XSS para disparar un XHR a MySpace.com para leer el token CSRF y falsificar la solicitud POST. De hecho, este es un patrón de ataque general que es útil para atacar sitios que usan httponly cookies. A medida que el uso de las cookies de httponly se haga más popular, también lo hará este patrón de ataque.

Otra carga útil xss es XSS Shell. Esto proporciona al atacante un canal interactivo para el navegador.

XSS se utiliza para realizar un ataque "Drive-By-Download".

Xss también se puede utilizar para fake the news. Con xss contra news sources que se encuentra regularmente, este es un problema bastante serio.

Editar: También le puede interesar cómo la base Apache got owned utilizando xss y tinyurl. Here es un exploit que escribí que usa un ataque estilo Samy para obtener CSRF.

+0

Gracias por la respuesta; algunos de los enlaces son interesantes. Acabo de terminar de leer el artículo sobre XSS Shell. Para aclarar lo que estoy buscando, en realidad estaba interesado en saber más sobre el proceso inicial de "infección" más de lo que se puede lograr después de la infección. En pocas palabras, la pregunta es "¿Cómo exploto la vulnerabilidad XSS reflejada en una aplicación, con cierta cantidad de ingeniería social involucrada?". Dado que no todas las aplicaciones se construyen por igual, realizar un ataque contra GMail sería diferente en comparación con CNN; este es un ejemplo que podría ser demasiado limitado, pero espero que entiendas la idea. –

+0

@Vineet Reynolds Para ser sincero, esto es para preguntas de programación, y estoy más interesado en escribir código de explotación que engañar a las personas para que hagan clic en los enlaces. Si está interesado en la ingeniería social, debe buscar en otra parte. Sin embargo, quizás le interese mi edición. – rook

+0

Rook, por si acaso no me han malinterpretado, tampoco me interesa el aspecto de la ingeniería social. En lo que respecta a la preparación de exploits, no he visto nada más allá del simple tipo de ataque de enlace en un correo electrónico. Es por eso que estoy interesado en saber cómo se escriben los exploits si se envía un formulario HTTP o si se debe usar XHR. Creo que el segundo enlace contiene respuesta a lo que estoy buscando. –

2

Reflejado XSS se produce cuando una página muestra la entrada de usuario malicioso. La pregunta "¿qué vectores de ataque hay?" es, por lo tanto, sinónimo de "¿qué entrada de usuario puede recibir una página?"

Algunas fuentes son:

  • La cadena de consulta de una solicitud GET que puede provenir de:
    • una URL en un correo electrónico
    • una redirección (a través de JS, 301 respuesta, o meta etiqueta) de un sitio hackeado o maliciosa
  • El cuerpo de una petición POST que puede provenir de:
    • una solicitud AJAX POST desde cualquier dominio (la misma política de origen no detiene la solicitud, solo analiza la respuesta)
    • Cualquier forma con method = "POST" y action = "XSSed_site.com". Los formularios se pueden publicar a través de js, o haciendo clic en un botón que se puede hacer mediante clics.
  • Otras formas de entrada, tales como:
    • archivos JS externos como clasificadores de mesa o bibliotecas que la página atacado está utilizando
    • comunicación de servidor a servidor que se muestra en la página atacado
    • cualesquiera otros datos que se muestran en la página siendo atacados que puede ser alterado por el atacante

Me doy cuenta de que la sección "Otras formas de entrada" se parece más a una vulnerabilidad XSS almacenada, pero cada aplicación es única, y algunas pueden traducir la información del usuario en cómo se componen las piezas externas (por lo tanto, reflejadas).

Una cadena de consulta en una solicitud GET de un correo electrónico infectado no es ciertamente el único vector para XSS reflejado (buena pregunta, sin embargo).

3

benlbroussard se refirió a esto ya, pero quiero reiterarlo por la importancia. Cliente gordo, cliente ligero, POST, GET, PUT; ninguna de estas cosas importa. Un agujero XSS se basa en un sitio que devuelve incorrectamente alguna información a alguien.

Si está buscando un ataque estrictamente reflejado, entonces la carga útil no se debe almacenar en ninguna parte de la aplicación de destino.En ese caso, creo que tienes razón en que un cliente gordo tenderá a ser más resistente porque un GET es la forma más fácil de iniciar un ataque XSS reflejado.

En cuanto a más vectores de ataque, una cosa interesante sobre la arquitectura de cliente de grasa es la codificación de entidad. Un cliente ligero puede codificar todo y terminar con él, con gran beneficio. Un cliente gordo debe codificar la respuesta a un GET inicial, pero las solicitudes asincrónicas con respuestas para JavaScript no pueden codificarse (completamente) y ser JS válidas. Este ir y venir aumenta las posibilidades de no codificar algo que debería ser, lo que es un gran paso hacia la creación de un vector XSS.

¿Tiene sentido?

Carl

+0

todo tiene sentido, excepto la codificación de la entidad de las solicitudes del cliente. Creo que los clientes deberían utilizar las reglas de codificación estipuladas en el protocolo subyacente (HTTP), ya que tener múltiples codificaciones implementadas podría llevar a ataques que emplean múltiples niveles de codificación. Aparte de eso, la mayoría de las otras cosas tienen sentido: AJAX (con XML en la respuesta) es mejor que AJAH (con HTML) si uno necesita protegerse contra XSS es algo que he derivado. –

+0

@Vineet, buen trato. Me temo que mi publicación está mal escrita, en realidad me refería a las respuestas de codificación de entidades del servidor, no a las solicitudes del cliente. Gran diferencia ¿verdad? No entiendo cómo XML es mejor que HTML. Mi pensamiento es que todo lo que importa es cómo usas la respuesta en JS, y eso informa cómo debe ser protegida. Evaluarlo cuando JS introduce algunos vectores, insertándolo en el DOM introduce otros. ¿Qué me estoy perdiendo? – Carl

+0

La inyección DOM es un tema interesante. Otra vez derivando una idea aquí: JavaScript que está presente (en una sección CDATA tal vez) en la respuesta del servidor (que es un documento XML), se puede interpretar si el desarrollador ha implementado la lógica de presentación de esa manera. Ciertamente, no es una buena práctica, eso no evitará que la gente codifique tal monstruosidad, que se presta a sí misma como una vía de ataque. No pensé en esto antes, y por lo tanto asumí que AJAX es más seguro que AJAH. –

Cuestiones relacionadas