Los formularios web de Asp.net no generan un nuevo ID de sesión si un usuario cierra la sesión y vuelve a iniciar sesión

1

Los formularios web de Asp.net no generan un nuevo identificador de sesión si un usuario cierra la sesión y vuelve a iniciarla. ¿Se trata de un riesgo de seguridad importante? Estamos utilizando SSL.

    
pregunta runners3431 05.05.2016 - 18:01
fuente

3 respuestas

1

En ASP.NET es normal que reutilice un ID de sesión . En cuanto a los datos almacenados en la sesión, si desea asegurarse de que no se pueda acceder a los datos una vez que el usuario cierre la sesión, puede llamar a Session.Abandon () en su funcionalidad de cierre de sesión. Pero incluso si no llama a Abandon, la sesión no es más vulnerable de lo que es mientras el usuario está conectado. Abandonar simplemente lo obliga a limpiarlo antes del tiempo que demore una sesión no utilizada en caducar (creo que el valor predeterminado es 20 minutos). Todavía es una buena idea llamar a Abandon para evitar el secuestro de la sesión después de que alguien cierre la sesión y se aleje de una computadora compartida.

    
respondido por el TTT 05.05.2016 - 18:56
fuente
0

Deberíamos aclarar una cosa antes de mover una:

Según la configuración: los ID de sesión no son lo mismo que los datos de sesión

Esto no significa que sea seguro, pero tampoco significa que sea inseguro.

Ahora analicemos la máquina de estados de las sesiones de usuario a lo largo de toda la transacción y veamos qué sucede con los datos en la sesión:

Comienza la sesión

La computadora navega al servicio web, obtiene la sesión id=X y los datos de la sesión se almacenan en la base de datos como id = X, session_data = {"User": null, "IP_address":..., "Mac":..., "Other_device_specific_info":...}

El usuario inicia sesión

El usuario inicia sesión y los datos de sesión en la base de datos se actualizan como UPDATE sessions SET session_data->user = Y WHERE id = X; . La sesión se ha actualizado para reflejar los cambios y los cambios de permisos, pero no es necesario actualizar la ID de la sesión porque es la misma máquina, en la misma visita .

El usuario hace cosas

El usuario hace algunas cosas y el session_data se actualiza de nuevo, estableciendo otros valores en él que quieren rastrear.

El usuario se desconecta

Ahora el usuario cierra la sesión y la sesión destruye los datos, pero mantiene la ID y realiza una nueva sesión con la misma ID porque es la misma máquina en la misma visita y ahora se ve como id = X, session_data = {"User": null, "IP_address":...} , que es idéntico a la sesión original, sin usuario.

Un usuario diferente inicia sesión

Ahora un usuario diferente inicia sesión y hacemos lo mismo otra vez.

Finalmente, la persona cierra la ventana / pestaña

Dado que la ID de la sesión fue efímera / se agotó el tiempo, finalmente se destruirá, y cuando la máquina vuelva a visitarla, tendrá una nueva ID de sesión.

Como puede ver, siempre que el back-end se haya diseñado correctamente, usar la misma ID de sesión no es un problema en absoluto. TI (tanto él como TI) sería un problema si los mismos datos de sesión fueron reutilizados.

Las malas noticias

Todo esto supone que los datos de la sesión y la identificación se rastrean correctamente y que el servicio web no es vulnerable debido a que la identificación de la sesión está asociada a la máquina y no al usuario.

De manera realista, debería cambiar en algún momento

Cosas para asegurarse

  • Las sesiones se configuran de forma segura
  • El flujo de sesión tiene sentido
  • ID de sesión! = Datos de sesión
  • Los datos de la sesión se almacenan de forma segura

Información adicional

  • Las sesiones son realmente más un método y pautas para almacenar información basada en el estado en algún lugar
  • Se pueden configurar infinitas formas seguras
  • Se pueden configurar infinitamente de muchas maneras inseguras
  • Realmente confía en que alguien más lo haya hecho bien cuando usa sus servicios, por lo que no hay garantías

El hecho de que una ID de sesión esté vinculada a una máquina y no a un usuario, no significa que se haya configurado mal. Simplemente significa que probablemente también estén rastreando lo que los usuarios han usado en qué máquinas, por cuánto tiempo con fines métricos.

Cosas a tener en cuenta por si acaso

Probablemente deberías buscar en Google estos términos solo para asegurarte de que tu configuración sea segura

  • Fijación de sesión
  • ataques de repetición
  • ataques MITM
  • Conexiones no seguras
  • Sesiones para siempre
  • Sesiones efímeras
  • sesión de cookies
  • sesión de base de datos
  • Redis Session
  • aplicación web sin estado
respondido por el Robert Mennell 05.05.2016 - 18:27
fuente
0

Sí, esto podría dar lugar a una vulnerabilidad de fijación de sesión .

Diga que su sitio está en example.com y permite que los usuarios suban sus propias páginas a usercontent.example.com para protegerse contra las secuencias de comandos entre sitios.

Puede pensar que las cookies en example.com están a salvo de cualquier secuencia de comandos que se ejecute en usercontent.example.com porque la flag de solo host se establece de forma predeterminada en las cookies de su sesión. Sin embargo, un atacante podría llevar a cabo un ataque de la siguiente manera:

  1. El atacante visita example.com y obtiene un ID de sesión, ella lo toma nota.

  2. El atacante carga algo de contenido en usercontent.example.com , incluido algo de JavaScript para establecer una cookie en el nivel example.com para establecer el ID de sesión en ella.

  3. El atacante incita a un usuario administrador en example.com a que visite la página del atacante en http://usercontent.example.com/evil_page .

  4. Ahora el atacante y la víctima tienen el mismo ID de sesión. El atacante recibió la identificación de la sesión en el servidor, la víctima recibió la identificación de la sesión en la página perversa del atacante.

  5. El atacante espera a que la víctima inicie sesión en example.com . Como el sitio no rota los ID de sesión, el atacante también iniciará sesión como administrador.

  6. Voila: un ataque de fijación de sesión.

Si esto es posible o no con su aplicación de formularios web, depende de si utiliza la autenticación de formularios o la identificación de sesión para rastrear las sesiones de los usuarios. Consulte esta respuesta . La autenticación de formularios genera un token nuevo para cada inicio de sesión, por lo que no debe ser vulnerable. Sin embargo, si la sesión también se usa y se confía al iniciar sesión, un atacante también puede aprovecharla para controlar maliciosamente a un administrador mediante la fijación de la sesión, dependiendo de la funcionalidad del sitio.

    
respondido por el SilverlightFox 09.05.2016 - 10:41
fuente

Lea otras preguntas en las etiquetas