¿Debería ser posible en un buen software, usando un enlace "Cambiar contraseña" para un solo usuario, intentar adivinar contraseñas para cada usuario de una aplicación?

2

Estoy teniendo una pelea con el "Experto en seguridad" de mi equipo sobre esta pregunta muy básica y necesito ayuda para obtener un buen argumento (s) válido.

El pretexto es el siguiente: ¿Debería ser posible / válido tratar de adivinar / contraseñas de fuerza bruta para cada usuario conocido de la aplicación, usando el enlace "Cambiar contraseña" para un solo usuario?

Le hice esta pregunta muy simple: Recibimos un enlace de "Cambiar contraseña" para cada cuenta cuando alguien solicita un cambio de contraseña, y parece que al usar ese enlace "Cambiar contraseña" se puede intentar adivinar la contraseña de todos y cada uno de los usuarios de la aplicación. ¿Esto es válido para la funcionalidad 'Cambiar contraseña'? Él dijo: "Sí, eso está bien"

Entonces, básicamente, cuando alguien solicita una opción de "Cambiar contraseña" de nuestro software, obtiene un enlace web. Ahora parece que al usar ese enlace es posible intentar realizar solicitudes de fuerza bruta para "Cambiar contraseña" para todos los usuarios de la aplicación. El punto de mi experto en seguridad es el mismo que también es posible desde la "Página de inicio de sesión" principal, ya que también se puede intentar forzar la modificación de la contraseña para cada usuario, por lo que es ajeno (¡¡¡contra cualquier necesidad de cambios !!) al "Cambio Contraseña "característica contra este problema. La misma lógica de detección de fuerza bruta se ubica debajo de la página "Cambiar contraseña" y de la página "Portal de inicio de sesión".

¡Por favor ayuda!

    
pregunta Deb 02.02.2016 - 14:03
fuente

3 respuestas

1

Un buen diseño es hacer que la página Cambiar contraseña sea accesible para los usuarios registrados de tal manera que solo él pueda cambiar su propia contraseña. (la identidad de los usuarios debe estar vinculada a algo fuera de su control (por ejemplo, sessionid) y no debe enviarse como un parámetro que se puede adivinar y que el usuario puede modificar para acceder a la página de cambio de contraseña para otros)

Su aplicación debe proteger contra ataques de fuerza bruta utilizando soluciones como captchas y / o mecanismos de bloqueo. Si hay una lógica detrás de estas dos páginas, lo más probable es que esté bien, a menos que este tipo de diseño se use en otras partes de la aplicación donde un usuario pueda hacerse pasar por otro usuario y realizar cambios en nombre de otros.

    
respondido por el Silverfox 02.02.2016 - 14:27
fuente
0

No, no debería ser posible hacer eso!

Hay varias cuestiones planteadas aquí:

  1. El enlace para cambiar la contraseña contiene el ID de usuario. Supongo que esto es para que los usuarios registrados cambien sus contraseñas, por lo que no estoy seguro de por qué está enviando enlaces en ese caso. Usted sabe que están autorizados (o, al menos, tienen la capacidad de iniciar sesión), por lo que puede cambiar la contraseña de forma segura en este caso solicitando la contraseña anterior (para evitar el robo de sesión) y la nueva contraseña en una pantalla que requiere una el usuario debe iniciar sesión. No es necesario un enlace, y los usuarios solo pueden cambiar su propia contraseña si conocen su contraseña anterior.

  2. El experto dice que puedes hacer fuerza bruta desde la pantalla de inicio de sesión. Eso no debería ser posible. Se podría evitar exigiendo que un CAPTCHA inicie sesión, o mediante otros métodos de protección de fuerza bruta, como la limitación de la velocidad de IP.

  3. No hay protección contra el robo de sesión. Al robar una cookie de sesión, sería posible cambiar la dirección de correo electrónico, solicitar un cambio de contraseña y luego cambiarlo a lo que yo quisiera. Si esto requiere la contraseña antigua, eso es bueno, pero permitiría ese ataque de fuerza bruta; si puedo cambiar la contraseña, adiviné la antigua correctamente.

  4. Si este es un sistema de contraseña olvidada (es decir, para personas que no conocen su contraseña anterior), no tiene protección contra la reproducción. Al recibir un enlace, puedo restablecer mi contraseña tantas veces como quiera. Los enlaces de contraseña olvidada deben incluir un token de uso único, de modo que cada restablecimiento solo pueda ocurrir una vez, e idealmente, dentro de un tiempo relativamente corto de la solicitud original.

respondido por el Matthew 02.02.2016 - 17:27
fuente
0

En general, nunca debe incluir información principal en sus URL públicas. La "información principal" aquí significa cualquier cosa que pueda insinuar al usuario (oa cualquier otra persona) cómo se ve la entrada siguiente o anterior de su tabla. Si tiene que incluir user_id en su url, al menos use algo como una dirección de correo electrónico para identificar al usuario. De esa manera, nadie podrá adivinar cuál podría ser la próxima dirección de correo electrónico. Si crees que alguien todavía usaría alguna expresión falsa y enviaría un enlace de restablecimiento de contraseña para cada correo electrónico, podrías dar un paso adicional para usar un cifrado bidireccional para cualquier información de identificación, de modo que tu enlace se vea algo como ...&userlogin=bNmaddaA_ad8... donde el valor podría ser algo así como una cadena codificada en base64 que ya estaba codificada de alguna otra manera. Por supuesto, tendría la clave secreta en su servidor, por lo que intentar descifrar dicha información arbitraria requeriría un poco de esfuerzo antes de que la persona pueda forzar cualquier cosa en su servidor.

    
respondido por el Trouble Zero 27.08.2018 - 00:20
fuente

Lea otras preguntas en las etiquetas