¿Por qué son necesarios los tokens CSRF?

3

Parece que todo el problema podría resolverse de manera muy elegante simplemente agregando un nuevo indicador a la especificación de la cookie HTTP.

De forma similar a como las cookies marcadas Secure solo serán enviadas por el agente de usuario a través de conexiones seguras y las que están marcadas HttpOnly serán inaccesibles para siempre a través del acceso DOM, ¿por qué no especificar una nueva bandera, por ejemplo, NoCSR , o SameOriginOnly , que, cuando se establece, evitaría que la cookie se envíe con solicitudes activadas por referencias de origen cruzado?

Por supuesto, se desactivaría de forma predeterminada para no romper el comportamiento esperado anteriormente para los sitios web existentes, según Principio de diseño HTML5 # 2.1 . Supongo que existe un agujero de seguridad, pero no uno que no se puede resolver fácilmente: no se puede depender de manera indiscriminada, porque los navegadores antiguos presumiblemente ignorarían la bandera no reconocida.

Entonces, ¿por qué no crear una enumeración en la lista blanca de NoCSR para implementar las cadenas UA correspondientes de las versiones de los agentes de usuario, y luego solo aceptar / procesar solicitudes sensibles y que requieran autorización que tengan uno de esos valores de User-Agent: ? Para solicitudes enviadas con encabezados de AU no listados o no incluidos en la lista blanca, se puede devolver un error que razonablemente exige que el usuario actualice a una versión de navegador compatible.

La lista blanca se podría SECAR con bibliotecas de implementación canónicas (probablemente sería más como una única función simple) para varios idiomas del lado del servidor.

¿No parece esto mucho más simple que el sistema actual de generación, seguimiento y lectura de tokens CSRF seguros?

Pensamientos, alguien?

    
pregunta wwaawaw 09.09.2012 - 16:27
fuente

3 respuestas

4

Básicamente tienes razón, tu solución evitaría que los tokens CSRF sean necesarios contra tales ataques. Pero también podríamos verificar el encabezado Referer para asegurarnos de que proviene de un dominio o subdominio permitido, ¿no? Y usar la referencia ya sería más flexible que un indicador NoCSR: puede agregar dominios o subdominios a la lista blanca.

El problema es la repetición de ataques, o cuando un usuario lo envía accidentalmente dos veces. Por esta razón, ya necesitaría un token que cambia de manera impredecible cada solicitud (a.k.a. nonce). Esto podría ser tan simple como un hash salado de la hora actual, pero aún debe hacerlo.

También las cookies son necesarias para mantener a alguien conectado. Tener que tener cookies separadas para identificar los ataques CSRF y cuando alguien está conectado es algo molesto. (El que identifique los ataques CSRF llevaría la marca NoCSR). Y si quiere saber si alguien está conectado, es probable que el menú tenga que ser diferente, incluso cuando se lo remite desde otro sitio web.

    
respondido por el Luc 10.09.2012 - 02:00
fuente
3

Yo diría que la mayoría complicación. Un enlace enviado a través de otra aplicación no llevaría ninguna referencia de sitio, por lo que es un agujero que debe ser considerado. Uno podría centrarse solo en pasar solicitudes desde dentro del sitio, pero podría haber una vulnerabilidad XSS que crearía un comportamiento similar a CSRF que se detendría por utilizando un nonce .

En un breve resumen: el método nonce ya funciona y no es muy complicado de implementar. Este método propuesto puede terminar siendo mucho más complicado de implementar, rompería la compatibilidad hacia atrás y requeriría el método nonce ya existente como una brecha.

Finalmente, hay otros comportamientos de no repetición para los que quizás aún desees un nonce.

    
respondido por el Jeff Ferland 10.09.2012 - 01:15
fuente
2

Desde que se hizo esta pregunta, solo se agregó una marca de cookie a los navegadores modernos: SameSite . De la especificación :

  

5.3.7. El atributo SameSite

     

Si el nombre de atributo coincide con mayúsculas y minúsculas con la cadena
  "SameSite", el agente de usuario DEBE procesar la cookie-av de la siguiente manera:

     
  1. Si el valor de atributo de cookie-av no es una coincidencia que no distinga mayúsculas y minúsculas      para "Estricto" o "Lax", ignore la "cookie-av".

  2.   
  3. Deje que "la aplicación" sea "Lax" si el valor-atributo de cookie-av es un      coincidencia entre mayúsculas y minúsculas para "Lax" y "Estricto" de lo contrario.

  4.   
  5. Agregue un atributo a la lista de atributos de cookie con una      nombre de atributo de "SameSite" y un valor de atributo de      "ejecución".

  6.   

5.3.7.1. Aplicación "estricta" y "laxa"

     

No se enviarán las cookies del mismo sitio en modo de cumplimiento "Estricto"   junto con las navegaciones de nivel superior que se activan desde una   contexto de documentos entre sitios. Como se discutió en la Sección 8.8.2, esto   podría o no ser compatible con la administración de sesión existente   sistemas Con el fin de proporcionar un mecanismo de caída que   mitiga el riesgo de ataques CSRF, los desarrolladores pueden establecer   El atributo "SameSite" en un modo de aplicación "Lax" que establece un   excepción que envía cookies del mismo sitio junto con el sitio   solicita si y solo si son navegaciones de nivel superior que utilizan un   Método "seguro" (en el sentido [RFC7231]) HTTP.

     

La aplicación laxa proporciona una defensa razonable en profundidad contra CSRF
  ataques que se basan en métodos HTTP inseguros (como "POST"), pero no lo hacen
  ofrece una defensa sólida contra CSRF como una categoría general de ataque:

     
  1. Los atacantes todavía pueden abrir nuevas ventanas o activar el nivel superior      navegaciones para crear una solicitud de "mismo sitio" (como      descrito en la sección 2.1), que es solo un Speedbump a lo largo del      camino a la explotación.

  2.   
  3. Funciones como "< link rel = 'prerender' >" [pretender] puede ser      explotado para crear solicitudes de "mismo sitio" sin el riesgo del usuario      detección.

         

    Cuando sea posible, los desarrolladores deben usar un mecanismo de administración de sesión   como el que se describe en la Sección 8.8.2 para mitigar el riesgo de CSRF
      más completamente.

  4.   

Se admite desde IE 11 (solo en Windows 10), Edge 16, Firefox 60, Chrome 51, Safari 12 y Opera 39, según caniuse.com .

    
respondido por el Joseph Sible 24.08.2018 - 22:49
fuente

Lea otras preguntas en las etiquetas