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

Pasos para reproducir

  1. Ser administrador en un sitio de Discourse actualizado con una o más claves de autenticación de dos factores habilitadas, como claves de seguridad y aplicaciones de autenticación.
  2. Poder iniciar y cerrar sesión correctamente con esas claves de autenticación de dos factores.
  3. Asegurarse de que la configuración del sitio para exigir inicio de sesión con autenticación de dos factores esté establecida en “no”.
  4. Eliminar todos los elementos de autenticación de dos factores de tu cuenta (de administrador) utilizando las herramientas estándar de la interfaz en la pestaña Seguridad de las preferencias del perfil del usuario administrador.
  5. Cerrar sesión.

Comportamiento esperado

  1. Iniciar sesión en el sitio con nombre de usuario o contraseña; acceso concedido; o
  2. Iniciar sesión en el sitio con “envíame un enlace por correo electrónico”; acceso concedido.

Comportamiento real

Ambos escenarios “esperados” fallan con un mensaje de error y no se permite el inicio de sesión:

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

No hay ninguna otra forma de iniciar sesión con la cuenta del administrador.


Vale la pena mencionar que en realidad no estoy bloqueado del sitio en cuestión; tenía otra sesión aún activa en otro equipo y pude ir a esa sesión y volver a agregar un autenticador basado en token para recuperar el acceso. Sin embargo, de no haber tenido otra sesión, habría estado “completamente” bloqueado.

10 Me gusta

Gracias por reportar esto. Lo he tenido marcado en favoritos durante los últimos días, pero aún no he podido probarlo. Asumo que lo que estás reportando es correcto, pero le echaré un vistazo detallado la próxima semana.

4 Me gusta

Supongo que este es el error, ¿verdad? No deberíamos permitirlo si la configuración del sitio indica que todos los administradores deben tener la 2FA habilitada.

Creo que no estás completamente bloqueado; puedes usar la consola para recuperarte ahora, pero no deberíamos facilitar que te encuentres en una situación patológica.

No estoy muy seguro de que esa sea la lógica correcta. No tenía forzar segundo factor activado en nada más que el valor predeterminado de “no”, y no es realmente seguro asumir que cada instalación tenga más de una cuenta de administrador. Parece que, una vez que se eliminan las claves de 2FA del perfil, alguna otra marca no se elimina en algún lugar…

Creo que no estás completamente bloqueado; ahora puedes usar la consola para recuperarte.

Supongo que esto es una solución de emergencia válida, aunque podría estar más allá de las habilidades de un administrador que no gestiona también su servidor, y podrían tener que localizar a un administrador de sistemas.

4 Me gusta

Me pregunto si los códigos de recuperación se mantuvieron intactos. ¿Podrías intentar ingresar uno de ellos?

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.