¿Por qué Double Submit Cookies requiere una cookie separada?

10

Según enlace :

  

Cuando un usuario se autentica en un sitio, el sitio debe generar un valor pseudoaleatorio (criptográficamente sólido) y configurarlo como una cookie en la máquina del usuario separada de la ID de sesión .

(énfasis mío)

¿Por qué el token CSRF debe almacenarse en una cookie separada si el ID de sesión es:

  • un valor aleatorio (un valor que el atacante no puede adivinar)
  • almacenado en una cookie (un valor que el atacante no puede leer)
  • generado por el servidor (un valor que el atacante no puede escribir)

¿Por qué no usar simplemente el identificador de sesión como el token CSRF? Aún debe enviar el valor dos veces (una vez en la cookie, una vez en el formulario) y comparar los valores, pero no use una cookie separada para el token CSRF.

    
pregunta Gili 16.06.2014 - 05:36
fuente

2 respuestas

13

El motivo es que esto permite que la cookie de la sesión principal se marque como HttpOnly (por lo que no será accesible para Javascript). Hay cierto debate sobre cuánto valor agrega esto, pero HttpOnly parece hacer que algunos tipos de ataques sean más difíciles, así que Podría decirse que es una medida de endurecimiento útil.

Si no usó una cookie separada, pero simplemente reutilizó el ID de sesión para estos fines, entonces Javascript necesitaría la capacidad de leer la cookie de sesión, y no podríamos marcar la cookie de sesión% código%. Al utilizar un valor separado, es posible marcar la cookie de sesión HttpOnly .

Por eso recomiendan usar un valor separado.

    
respondido por el D.W. 27.06.2014 - 18:14
fuente
2

Hay un par de razones que se me ocurren:

  • Si se filtra el token CSRF, no filtra la cookie de autenticación.
  • Le permite configurar el token de autenticación como solo HTTP y aún tener un valor CSRF que JavaScript puede leer para crear solicitudes AJAX

Personalmente, no creo que la técnica de doble envío de cookies sea muy efectiva. Si bien no es un CSRF general, si puedo MITM el tráfico de texto sin formato del usuario, puedo realizar el CSRF contra sitios de solo https. Esto se hace inyectando un iframe o img con el origen del sitio atacado, luego respondiendo al iframe o img con una cookie CSRF propia y, finalmente, generando la solicitud entre sitios. (Sí, requiere un MITM del usuario, pero permite realizar un ataque MITM de texto sin formato en un sitio que se ofrece mediante SSL solo sin HSTS. El uso de HSTS mitiga este ataque, como señala Gili).

    
respondido por el David 16.06.2014 - 05:52
fuente

Lea otras preguntas en las etiquetas