Firmar cookies de envío doble, donde el valor es una cadena pseudoaleatoria y una firma de la misma. ¿Es esto más seguro?

3

No estoy seguro si estoy describiendo algo que ya se ha propuesto. Si no, me gustaría acuñar esta " cookies de envío doble firmadas " como un método para mejorar la técnica de cookies de envío doble que intenta evitar CSRF ataques .

Aquí está el concepto :

  1. Antes de generar una página web, el servidor establece una cookie en el encabezado donde el valor incluye dos valores:

    • token valor generado a partir de un número aleatorio seguro, y

    • firma valor que es la firma del token (o tal vez simplemente un hash del mismo).

  2. Cuando el cliente realiza solicitudes subsiguientes, lee la cookie y incluye el token + firma en las solicitudes POST o GET (junto con la cookie está automáticamente en los encabezados de solicitud).

  3. Cuando el servidor recibe la solicitud, se autentica mediante:

    • verifica si el token + firma incluido en las solicitudes POST o GET coincide con el valor de cookie en el encabezado de la solicitud, y

    • toma el valor (cookie / cadena de consulta) token y lo firma de nuevo y compara si la firma resultante coincide con el valor (firma / cookie de la cadena de consulta) . Si coinciden, demuestra que la cookie no ha sido escrita a ciegas por un subdominio o alguna otra cosa.

En aras de la discusión, supongamos que las prevenciones de ataques XSS se han implementado correctamente y que solo SSL es verdadero.

¿Se ha usado este método antes? ¿Previene correctamente el ataque donde un subdominio escribe cookies en el dominio principal ?

[EDITAR: Originalmente tenía el token y la firma en dos cookies separadas, pero para simplificarlo como lo sugiere @SteffenUllrich, he editado la pregunta para reflejar tanto el token como la firma en una cookie.]

    
pregunta Joseph Shih 25.04.2016 - 06:01
fuente

2 respuestas

1

No creo que esto proporcione más protección que las cookies de doble envío normales.

Si un atacante puede sobrescribir una cookie utilizando un subdominio no protegido (https), podría sobrescribir 2 cookies con la misma facilidad.

El atacante en el senario obtendría un token legítimo y un valor de token firmado, incrustaría ambos en la solicitud y escribiría esas dos cookies en el caché de los navegadores con la vulnerabilidad del subdominio.

    
respondido por el Daisetsu 25.04.2016 - 07:43
fuente
2

El problema con el envío doble ingenuo es que si el atacante podría insertar una cookie controlada por un atacante, también podría establecer el token CSRF en esta cookie y así anular la protección CSRF, ya que el token y la cookie coinciden.

Esto puede ser derrotado si el atacante no puede crear un token CSRF y adivina la cookie de verificación correspondiente. Esto se puede lograr al tener algún secreto del lado del servidor que se usa para crear la cookie de verificación desde el token CSRF, es decir, alguna firma que usa una clave privada del lado del servidor, un hash de token secreto + o similar. En este caso, no importa si la firma es una cookie separada, se incluye en la cookie de verificación o si solo utiliza la firma como cookie de verificación.

Por lo tanto, en este caso, creo que su solución podría ayudar a solucionar los problemas con el doble envío nativo, pero es un complejo innecesario: no necesita dos cookies, sino que simplemente puede usar la firma como la cookie de verificación. Para la verificación, simplemente intente firmar el token CSRF y, si coincide con la firma, todo está bien. Y el atacante no puede crear un token y una firma coincidente porque no conoce el secreto del lado del servidor necesario para la firma.
EDITAR: tenga en cuenta que la firma también debe incluir información sobre el usuario actual, por ejemplo, el id de sesión De lo contrario, otro usuario podría obtener un token válido + par de firma y reutilizarlo.

Tenga en cuenta que nada de esto ayuda si el atacante obtiene acceso tanto al token CSRF como a la cookie de verificación porque, en este caso, podría usarse para reutilizar este par. Pero este no es el escenario en el que el doble envío se preocupa, es decir, se supone que la lectura de la cookie está protegida mediante el uso de cookies httpOnly y una conexión protegida (https) y tampoco es posible para XSS.

    
respondido por el Steffen Ullrich 25.04.2016 - 07:00
fuente

Lea otras preguntas en las etiquetas