Cuando un usuario desea cambiar la contraseña de una cuenta, la mayoría de las aplicaciones web presentan un formulario donde el usuario debe ingresar la nueva contraseña y la contraseña anterior. Hasta ahora pensé que entendía los beneficios de este enfoque. Por ejemplo, la contraseña antigua es una mitigación adicional a CSRF y evita el secuestro de cuentas (es decir, cambiar la contraseña de una cuenta) si un atacante obtiene la sesión web.
En Google - por supuesto;) - es diferente. Cuando el usuario hace clic en el enlace para cambiar la contraseña, se presenta un formulario de inicio de sesión y el usuario debe volver a autenticarse. Después de volver a autenticar, se muestra un formulario donde el usuario solo tiene que ingresar la nueva contraseña. La contraseña antigua no es necesaria otra vez.
Hay algunos pros y contras con los enfoques:
- Pedir la contraseña allí donde ocurre el cambio (primer enfoque) tiene la ventaja de que se reduce considerablemente el riesgo de que se puedan aprovechar las debilidades en todo el proceso. La nueva contraseña y la contraseña anterior se procesan como un par. Si algo sale mal (por ejemplo, un atacante puede establecer un usuario arbitrario para la sesión web), existe una alta probabilidad de que la contraseña anterior aún proteja el cambio de contraseña.
- Para el segundo enfoque (Google), podría haber puntos débiles en el proceso después de la autenticación (por ejemplo, la protección CSRF podría fallar, errores en la administración de la sesión).
- El segundo enfoque tiene la ventaja de que la aplicación para cambiar la contraseña no es accesible antes de la autenticación. Por lo tanto, las debilidades en la aplicación no son accesibles antes de la autenticación nuevamente. Las debilidades que no son accesibles no pueden ser explotadas.
- Tal vez Google quiera implementar una sola forma para realizar la autenticación. Creo que Google utiliza algún tipo de análisis de riesgo para el inicio de sesión y que podría ser posible que Google simplemente quiera usar esos mecanismos para el proceso de cambio de contraseña.
En mi opinión, el riesgo de debilidades en el segundo enfoque es mucho mayor, especialmente porque pueden ocurrir muchas cosas entre la autenticación y el envío de la nueva contraseña. Además, creo que la reutilización del análisis de riesgos y cosas por el estilo deberían ser posibles sin un gran esfuerzo para un proceso de cambio de contraseña también.
Entonces, mi pregunta es ¿echo de menos algo que hace que el segundo enfoque (Google) sea superior?