La posibilidad que usted describe existe; como otros han señalado, es un "hombre en el ataque central".
Para frustrarlo, necesitará un secreto adicional que no se envíe por correo electrónico, como (una clave secreta pobre) como una clave de cookie. Puede pedirle al usuario que restablezca la contraseña usando la misma computadora y navegador que se usa para enviar el comando "Quiero restablecer mi contraseña".
Entonces, el atacante no podrá enviar la cookie apropiada, ya que su dominio es diferente al original, por lo que el navegador no le habrá indicado el valor de cookie apropiado para usar.
Una posibilidad más estricta es requerir que el usuario inserte en la página de "Restablecimiento de contraseña", sin cerrarla , un código que se envía por correo electrónico. El correo electrónico en ese punto ni siquiera contiene un enlace. El atacante conoce el código, pero no tiene control en la ventana abierta del navegador. La ventana puede contener un secreto oculto que el servidor está "diciendo" a sí mismo, o una cookie (que es básicamente lo mismo). Para evitar el uso de información persistente, el servidor podría almacenar en la página una cadena aleatoria y enviar la cadena aleatoria con un sal secreto. El usuario luego llenará un formulario que tiene ambos valores (uno oculto, uno copiado del correo electrónico). El servidor hash el código con su sal secreta. Si las dos cadenas son iguales, el cambio es aprobado. Para evitar "ataques repetidos" en este caso (es decir, la reutilización de un par de hash / desafío conocido), la verificación podría incluir el nombre de usuario y una marca de tiempo:
form
username hidden (e.g. "lserni")
timestamp hidden (e.g. 20140108131005)
hash hidden (e.g. "e2961ca083b4393690ec74b93d3c4b32")
code input
El usuario recibe el código "123456", al azar, de 100000 a 999999. Hay una posibilidad en aproximadamente novecientos mil de adivinarlo con éxito. El servidor concatena SERVERSECRETPASSWORD.lserni.20140108131005.123456 y verifica que hash a e2961ca083b4393690ec74b93d3c4b32
.
El atacante puede adivinar la marca de tiempo, pero no tiene acceso al hash. Conocer un hash y su código correspondiente solo funcionará con el nombre de usuario correcto, y solo hasta que la diferencia entre la marca de tiempo almacenada no se pueda cambiar y el reloj de pared no crezca demasiado, en cuyo punto el servidor ofrecerá para enviar otro correo electrónico.
Un problema posible (inevitable)
Por otra parte, si el atacante tiene el control del correo electrónico, él mismo puede iniciar una recuperación de contraseña y se le otorgará acceso completo al recurso al menos una vez. Para protegerse contra esto, se debe proporcionar alguna otra información (por ejemplo, una "pregunta secreta") para iniciar el restablecimiento de la contraseña. Además, se debe emitir una advertencia en caso de que la autenticación no exitosa se envíe al usuario, para que se le informe del problema ("Contraseña incorrecta. Recuerde que cambió la contraseña ayer a las 17:23 de IP 1.2.3.4. Si no lo hizo, tenga en cuenta que ... ");
Otro posible problema
En algunos sistemas, se le permitirá pedir al servidor que " se acuerde de usted ". El servidor hará esto al emitir una cookie que es, en todos los aspectos, una autenticación débil y podría ya no estar conectado con la contraseña.
Un cambio de contraseña debería invalidar todas estas cookies , de lo contrario, el atacante puede:
- Toma el control del correo electrónico.
- iniciar un restablecimiento de contraseña
- interceptar el código de restablecimiento de contraseña
- borrar el correo electrónico con la contraseña restablecida
- cambiar la contraseña
- pregunte al servidor "Recuérdeme" y obtenga una cookie "Get Home Free"
- lucro
- El usuario se descubrirá incapaz de iniciar sesión.
- él cambiará la contraseña y volverá a iniciar sesión
- el atacante still podrá iniciar sesión con su cookie.
Una forma de hacer esto es establecer la cookie en una cadena aleatoria más el hash de un secreto de servidor, la cadena aleatoria, el nombre de usuario y el hash de contraseña del usuario en la base de datos. Un cambio de contraseña luego hará que se vuelvan obsoletas automáticamente todas las cookies de autenticación existentes para ese usuario.