¿Por qué la vulnerabilidad XSS del sitio que lanza el ataque CSRF hace que el patrón del token del sincronizador no sea seguro?

5

Estaba leyendo esta pregunta sobre el uso del patrón de token de Synchronizer para protegerse contra CSRF y los comentarios de la respuesta me intrigaron. Por supuesto, como dice el último comentario, si su sitio tiene una vulnerabilidad XSS, entonces CSRF no es su mayor preocupación. Pero, ¿qué sucede si el otro sitio es una vulnerabilidad XSS?

Déjame poner el escenario.

  • fakebank.com = su banco que tiene una página de transferencia de fondos que requiere que use un token único que obtiene en una página de obtención que debe incluirse en una publicación. Actualmente estás conectado a él.
  • insecurefun.com = un sitio que está visitando actualmente. Tiene numerosos problemas, incluida la vulnerabilidad XSS.
  • malicioussite.com = un sitio desagradable que nunca querrá visitar, pero es posible que haya publicado algunos complementos en insecurefun.com.

Por lo tanto, carga insecurefun.com y obtiene un anuncio de malwaresite.com. El complemento redirige un acceso a fakebank.com utilizando los datos de su sesión, lo que hace que fakebank.com envíe a su navegador la página de transferencia de confirmación que incluye el token único. Luego, el complemento explota la vulnerabilidad XSS de insecurefun.com para ejecutar javascript para obtener el token y finalmente realiza una publicación, lo que hace que su banco transfiera fondos.

Ahora, estoy bastante seguro de que esto no puede funcionar, porque si el Patrón de token del sincronizador se pudiera explotar tan fácilmente, no se recomendaría como protección contra los ataques CSRF. Pero, lo que no entiendo es por qué esto no puede ser explotado.

Mi única suposición es que la secuencia de comandos malintencionada no puede retener el token único para usarlo debido a la misma política de dominio. Pero si haces algo como this , parece que el script malicioso podría iniciar el GET Han devuelto el código HTML como una cadena, analizan los datos para el token único y luego inician la POST sin informar al usuario. ¿Qué me falta para evitar que esto funcione?

    
pregunta Lawtonfogle 08.10.2013 - 19:09
fuente

3 respuestas

1
  

Luego, el complemento explota la vulnerabilidad XSS de insecurefun.com para ejecutar javascript para obtener el token y finalmente realiza una publicación, lo que hace que su banco transfiera fondos.

No. Las vulnerabilidades de XSS funcionan de la otra manera. Si insecurefun.com tiene una vulnerabilidad XSS, insecurefun.com (y todos los sitios que tienen insecurefun.com en su Access-Control-Allow-Origin ) están abiertos a un ataque CSRF. Sin embargo, la vulnerabilidad XSS de insecurefun.com no permite que ningún atacante toque fakebank.com.

Una vulnerabilidad XSS en un sitio significa que ese sitio es vulnerable a un ataque de un tercero; no ese código en ese sitio tiene rienda suelta en su navegador. Si fakebank.com tuviera una vulnerabilidad XSS, entonces habría un problema. De lo contrario no.

Piénsalo; si todo lo que se necesitaba para ejecutar CSRF era tener una vulnerabilidad XSS, entonces los atacantes introducirían vulnerabilidades XSS intencionales en sus páginas, lo que les permitiría atacar otros sitios.

    
respondido por el Manishearth 08.10.2013 - 20:31
fuente
1
  

El complemento redirige un acceso a fakebank.com utilizando los datos de su sesión,   haciendo que fakebank.com envíe a su navegador la página de transferencia de confirmación   que pasa a incluir el token único.

Esto no puede suceder si fakebank.com está utilizando un token CSRF correctamente.

Un ataque CSRF es básicamente hacer una solicitud a un sitio de destino desde un sitio malicioso. El propósito del token CSRF es requerir que todas las solicitudes realizadas al sitio incluyan este token secreto. El sitio malicioso no tiene forma de saber cuál es este token mientras la protección CSRF esté configurada correctamente.

Por lo tanto, sin un token CSRF requerido, una solicitud podría realizar una publicación con la "transferencia a cuenta" y el monto. Cuando se requiere un token CSRF, la solicitud también debe incluir un token CSRF que un sitio malicioso no sabrá.

Probé el método descrito en el enlace que proporcionaste y parece que no funciona en un sitio configurado correctamente.

Si, de hecho, pudo extraer la página de un usuario autenticado de un dominio que no controla (como sugiere el enlace) y esa página contenía el token CSRF, entonces sí, podría omitir la protección proporcionada por un Token CSRF.

Si fakebank.com tiene una vulnerabilidad XSS, todas las apuestas están desactivadas.

    
respondido por el Abe Miessler 08.10.2013 - 19:37
fuente
0

Bueno, no es posible acceder a los contenidos de iframe entre dominios (de forma predeterminada) mediante js (así es como se muestra el complemento, supongo). De lo contrario, todo el concepto de utilizar un pseudo aleatorio (en particular los métodos de mitigación CSRF que se basan en la reescritura estática de páginas) sería un completo fracaso.

Chrome, por ejemplo, muestra el siguiente error, cuando intentas acceder al contenido de iframe utilizando js:

También digamos que esto fue posible, una opción posible sería utilizar los métodos de mitigación de CSRF que adjuntan tokens en el momento del envío de solicitudes, como en OWASP CSRF Protector.

    
respondido por el mebjas 13.12.2014 - 19:22
fuente

Lea otras preguntas en las etiquetas