Administrador bloqueado fuera del sitio después de eliminar las claves de dos factores de las preferencias

Steps to reproduce

  1. Be an admin on an up-to-date Discourse site with one or more two-factor keys enabled, such as security keys and authenticator app.
  2. Be able to log in and out successfully with those two-factor keys.
  3. Ensure that the site setting for enforcing two-factor logins is set to “no”.
  4. Delete all of the two-factor items from your (admin) account using the standard UI tools in the Security tab of the admin’s user profile preferences.
  5. Log out.

Expected behavior

  1. Log in to site with username or password; access granted; or
  2. Log in to site with “email me a link”; access granted.

Actual behavior

Both “expected” scenarios fail with an error message, and login is not allowed:

The selected two-factor method is not enabled for your account.

There is no further way to log in with the admin’s account.


It is worth noting that I am not actually locked out of the site in question; I had another session still active on another computer and was able to go over to that session and re-add a token-based authenticator to get back in. However, had I not had another session I would have been “fully” locked out.

10 Me gusta

Thanks for reporting this. I’ve had it bookmarked for the past few days, but haven’t got around to testing it yet. I assume that what you’re reporting is correct, but will take a close look at it next week.

4 Me gusta

I guess this is the bug? We should not allow that if your site setting says that all admins must have 2fa enabled.

I think you are not fully locked out, you can use the console to recover now, but we should not make it easy for you to create a pathological situation.

I’m not quite sure that’s the right logic? I didn’t have enforce second factor on anything but the default value of “no” and it’s not really safe to assume that every installation has more than one admin account. It seems that once the 2FA keys are removed from the profile, some other flag is not being removed somewhere…

I think you are not fully locked out, you can use the console to recover now

I suppose this is a valid emergency workaround although it may be beyond the skills of an admin who does not also manage their server and they might have to track down a sysadmin.

4 Me gusta

I’m wondering if the recovery codes were left alone. Can you try entering one of those?

1 me gusta

@Osama mientras estás en el código, quizás:

  • SI el usuario no podrá iniciar sesión nuevamente después de eliminar esta 2FA (la última 2FA que tiene y la 2FA es requerida para la cuenta según la configuración de nivel de confianza / configuración del administrador)

  • ENTONCES no permitas que eliminen la última 2FA y muestra un error.

1 me gusta

Creo que me ha afectado el mismo error (Discourse versión 2.7.10, actualizado hoy).

Se me concedieron derechos de administrador y habilité la 2FA. Más tarde, creé un segundo usuario para mí desde un correo electrónico diferente para que se utilizara exclusivamente para administración y le concedí derechos de administrador.
Luego, eliminé los derechos de administrador de mi usuario original y eliminé todos los métodos de 2FA. Ahora mi usuario original recibe el comportamiento de error mencionado por el OP.
No tengo acceso a la consola de este servidor. El sitio no está aplicando la 2FA para los administradores.

¿Alguien podría detallar qué se necesita hacer exactamente en la consola para solucionar este problema?

Por cierto, las razones por las que he hecho esto es que quiero estar sujeto a los permisos y notificaciones normales (o no) para grupos privados en el sitio a través de mi usuario normal, quizás con el modo de lista de correo activado. No necesito la fricción adicional de la 2FA como usuario normal.

Por supuesto, el usuario administrador puede verlo todo, por lo que se basa en la confianza de que no espiarán innecesariamente. Ese usuario puede dejar todas las notificaciones desactivadas y no habilitar el modo de lista de correo.

1 me gusta

Creo que no tienes la oportunidad de usar los códigos de recuperación, porque solo se pueden usar a través del flujo de inicio de sesión 2fa.

@sam Dices tentadoramente que este problema se puede resolver a través de la consola, sin decir qué se debe hacer específicamente. Realmente agradecería una indicación sobre cómo solucionar este problema en particular.

¿Es de ayuda?

2 Me gusta

Sospecho que no, ya que la cuenta ya tiene la autenticación de dos factores (2FA) desactivada, o para ser más precisos, ha eliminado todos los métodos de 2FA de su cuenta (la 2FA aparece como “no” en el perfil), pero de alguna manera el inicio de sesión todavía está intentando usar la 2FA.
Esa guía es para un usuario que tiene la 2FA habilitada pero ha perdido/olvidado sus medios para generar un token válido.

SOLUCIÓN: Como usuario administrador, visita la página de detalles del usuario bloqueado, desplázate hasta el final y haz clic en el botón rojo Suplantar.
Luego, en las preferencias del usuario, agrega un método de 2FA. (necesitas tener la contraseña del usuario para hacer esto)
El secreto de 2FA debe entregarse al usuario bloqueado.
En este caso, soy ambos usuarios, ¡así que no es una tarea difícil :wink:

1 me gusta

Bien hecho. :+1::slightly_smiling_face:

¿Eso te permitió luego eliminar con éxito la 2FA del usuario?

No. Quitar el método 2FA volvió a dejar al usuario bloqueado.

¿Eliminar 2FA presionando el botón “Desactivar todo” se comporta de manera diferente a eliminar el último método de 2FA? Es decir, ¿eliminarlo sin bloquearte?

He podido reproducir esto y encontrar una solución usando la consola.

La reproducción es ligeramente diferente a como se describe en la primera publicación. El paso 2 es crucial, los pasos 3 y 4 son menos importantes.

  1. Ser un usuario administrador en un sitio de Discourse actualizado con una o más claves de dos factores habilitadas, como claves de seguridad y aplicación de autenticación.
  2. Habilitar códigos de respaldo
  3. Poder iniciar y cerrar sesión correctamente con esas claves de dos factores.
  4. Asegurarse de que la configuración del sitio para forzar inicios de sesión de dos factores esté configurada en “no”.
  5. Eliminar todos los elementos de dos factores (autenticadores y claves de seguridad) de su cuenta de administrador usando las herramientas de interfaz de usuario estándar en la pestaña de Seguridad de las preferencias del perfil de usuario del administrador.
  6. Cerrar sesión.

Lo que sucede es que si se han eliminado todos los elementos de dos factores, los códigos de respaldo todavía están presentes en la base de datos y la autenticación de dos factores no se considera deshabilitada al iniciar sesión.

Dado que ya no hay un autenticador ni una clave de seguridad, el usuario no puede usar los códigos de respaldo.

Una vez que se han eliminado todos los autenticadores y claves, los códigos de respaldo ni siquiera se pueden eliminar en Perfil - Seguridad.

Solución propuesta: Cuando se elimina el último elemento de seguridad del usuario, también se deben eliminar los códigos de respaldo.

Solución alternativa: eliminar todos los registros de UserSecondFactor para este usuario de la base de datos.

UserSecondFactor.where(user_id: 1).delete_all

12 Me gusta

¿Es posible que se implemente una solución para esto en una versión más reciente de Discourse? Hoy me sucedió exactamente lo mismo y fue un problema recuperar mi cuenta.

1 me gusta

Tengo el mismo problema con un usuario que se queja de que no puede iniciar sesión. Este usuario tenía habilitada la autenticación de dos factores (2FA) en su cuenta en algún momento, pero luego la eliminó. El mensaje de error que recibe cuando intenta iniciar sesión es:

El método de dos factores seleccionado no está habilitado para tu cuenta.

  • Desde el menú de administrador, veo que el perfil del usuario indica “Autenticación de dos factores” como “No”.

  • No tengo la contraseña del usuario para emplear esta solución alternativa Admin locked out of site after deleting two-factor keys from prefs - #13 by ewblen e incluso si la tuviera, yo mismo no tengo ningún método de 2FA para añadir allí.

  • Dado que es de mala educación pedirle la contraseña al usuario, intenté cambiar su correo electrónico o añadir un correo electrónico secundario que controlo. Sin embargo, después de hacer clic en “Confirmar” en la URL del correo electrónico de confirmación, recibo este error:

El método de dos factores seleccionado no es válido.

… y el correo electrónico no se cambia/añade.

  • No tengo acceso a la consola ni a la base de datos de esta instalación de Discord porque está “gestionada”.

¿Hay algo más que pueda intentar? ¿O el usuario está bloqueado de su cuenta para siempre?

Esto es terrible.

No tengo acceso a la consola de discourse, porque esta es una instancia de discourse “alojada”.

Los administradores deben poder borrar la configuración de 2FA (autenticación de dos factores) desde la interfaz de administración, es extremadamente poco profesional tener que pedirles a nuestros usuarios sus contraseñas.

Este es claramente un error importante que debe resolverse. ¿Cómo podemos informar formalmente sobre esto y rastrear su progreso de corrección de errores?

Como proyecto OpenSource con una instancia de discourse alojada, no puedo acceder a la consola ni a la base de datos, solo tengo la interfaz de administración.

En realidad, no estoy de acuerdo. Cuando se deshabilita la 2FA, los códigos de respaldo de la 2FA deben ser completamente ignorados y no importar en absoluto.

Al arreglar esto en el lugar equivocado (cuando se elimina el último método de 2FA, se eliminan los códigos de respaldo), todavía tenemos personas que no pueden iniciar sesión y simplemente se rindieron sin informar.

Al arreglar el error real (considerando los códigos de respaldo cuando la 2FA está deshabilitada), solucionamos esto para el 100% de los usuarios afectados, de inmediato, en lugar de simplemente asegurarnos de que esto no siga sucediendo a nuevos usuarios.

Me funcionó, el usuario me dio la contraseña.

Debes no deshabilitar 2FA directamente, primero debes:

  • eliminar todos los códigos de respaldo 2FA
  • verificar tres veces que todos los códigos de respaldo 2FA se hayan eliminado
  • solo entonces deshabilitar 2FA

Usando este método, en realidad puedes deshabilitar 2FA. Esto es cierto tanto para los usuarios administradores que suplantan a los usuarios para solucionar esto, como para cualquier usuario normal que simplemente quiera deshabilitar 2FA.