Admin bloqueado do site após excluir chaves de dois fatores das preferências

Passos para reproduzir

  1. Seja um administrador em um site Discourse atualizado com uma ou mais chaves de autenticação de dois fatores habilitadas, como chaves de segurança e aplicativo autenticador.
  2. Consegue fazer login e logout com sucesso usando essas chaves de autenticação de dois fatores.
  3. Certifique-se de que a configuração do site para forçar logins de dois fatores esteja definida como “não”.
  4. Exclua todos os itens de autenticação de dois fatores da sua conta (de administrador) usando as ferramentas padrão da interface na aba Segurança das preferências do perfil do usuário administrador.
  5. Faça logout.

Comportamento esperado

  1. Faça login no site com nome de usuário ou senha; acesso concedido; ou
  2. Faça login no site com “envie-me um link por e-mail”; acesso concedido.

Comportamento real

Ambos os cenários “esperados” falham com uma mensagem de erro, e o login não é permitido:

O método de autenticação de dois fatores selecionado não está habilitado para sua conta.

Não há outra maneira de fazer login na conta do administrador.


Vale ressaltar que, na verdade, não fiquei bloqueado fora do site em questão; eu tinha outra sessão ainda ativa em outro computador e pude acessar essa sessão para re-adicionar um autenticador baseado em token e voltar a entrar. No entanto, se eu não tivesse outra sessão ativa, teria ficado “totalmente” bloqueado.

10 curtidas

Obrigado por relatar isso. Eu já tinha salvo nos favoritos nos últimos dias, mas ainda não consegui testar. Acredito que o que você está relatando esteja correto, mas darei uma olhada mais de perto na próxima semana.

4 curtidas

Acho que esse é o bug? Não deveríamos permitir isso se a configuração do seu site exigir que todos os administradores tenham 2FA ativado.

Acho que você não está totalmente bloqueado; pode usar o console para recuperar agora, mas não deveríamos facilitar a criação de uma situação patológica.

Não tenho certeza de que essa seja a lógica correta? Eu não tinha exigir segundo fator ativado em nada além do valor padrão de “não”, e não é realmente seguro assumir que cada instalação tenha mais de uma conta de administrador. Parece que, uma vez que as chaves de 2FA são removidas do perfil, alguma outra flag não está sendo removida em algum lugar…

Acho que você não está totalmente bloqueado, pode usar o console para recuperar agora

Suponho que isso seja uma solução alternativa válida de emergência, embora possa estar além das habilidades de um administrador que também não gerencia seu servidor, e eles podem ter que procurar um administrador de sistema.

4 curtidas

Estou me perguntando se os códigos de recuperação permaneceram inalterados. Você pode tentar inserir um deles?

1 curtida

@Osama enquanto você está no código, talvez:

  • SE o usuário não tiver permissão para fazer login novamente após excluir este 2FA (último 2FA que eles têm e o 2FA é necessário para a conta de acordo com as configurações de nível de confiança / configurações do administrador)

  • ENTÃO não permita que eles excluam o último 2FA e exiba um erro.

1 curtida

Acho que fui atingido pelo mesmo bug (Discourse versão 2.7.10, atualizado hoje).

Recebi direitos de administrador e ativei a 2FA. Mais tarde, criei um segundo usuário para mim a partir de um e-mail diferente para ser usado exclusivamente para administração e concedi direitos de administrador a ele.
Em seguida, removi os direitos de administrador do meu usuário original e excluí todos os métodos de 2FA. Agora, meu usuário original recebe o comportamento de erro mencionado pelo OP.
Não tenho acesso ao console deste servidor. O site não está exigindo 2FA para administradores.

Alguém poderia detalhar exatamente o que precisa ser feito no console para resolver este problema.

Aliás, os motivos pelos quais fiz isso são que quero estar sujeito às permissões e notificações normais (ou não) para grupos privados no site através do meu usuário normal, talvez com o modo de lista de e-mails ativo. Não preciso do atrito extra da 2FA como um usuário comum.

Claro, o usuário administrador pode ver tudo, então é uma questão de confiança que ele não espione desnecessariamente. Esse usuário pode deixar todas as notificações desativadas e não ativar o modo de lista de e-mails.

1 curtida

Eu acho que você não tem a oportunidade de usar códigos de recuperação, porque eles só podem ser usados através do fluxo de login 2fa?

@sam Você diz tentadoramente que este problema pode ser resolvido pelo console, sem dizer o que especificamente precisa ser feito. Eu realmente apreciaria uma dica sobre como corrigir este problema em particular.

Isso ajuda em alguma coisa?

2 curtidas

Suspeito que não, pois a conta já tem 2FA desativado, ou para ser mais preciso, removeu todos os métodos de 2FA da conta (2FA aparece como “não” no perfil), mas de alguma forma o login ainda está tentando usar 2FA.
Esse guia é para um usuário que tem 2FA ativado, mas perdeu/esqueceu seus meios de gerar um token válido.

SOLUÇÃO: Como usuário administrador, visite a página de detalhes do usuário bloqueado, role até o final e clique no botão vermelho Impersonate (Simular).
Em seguida, nas preferências do usuário, adicione um método de 2FA. (é necessário ter a senha do usuário para fazer isso)
O segredo de 2FA deve ser fornecido ao usuário bloqueado.
Neste caso, sou ambos os usuários, então não é uma tarefa difícil :wink:

1 curtida

Bom trabalho. :+1::slightly_smiling_face:

Isso permitiu que você removesse com sucesso a 2FA do usuário depois?

Não. Remover o método 2FA deixou o usuário bloqueado novamente.

A remoção da 2FA pressionando o botão Desativar Tudo se comporta de forma diferente da remoção do último método de 2FA? Ou seja, pressionar esse botão o remove sem bloquear o acesso?

Consegui reproduzir isso e encontrei uma solução usando o console.

O repro é ligeiramente diferente de como é descrito na primeira postagem. O passo 2 é crucial, os passos 3 e 4 são menos importantes.

  1. Seja um usuário admin em um site Discourse atualizado com uma ou mais chaves de autenticação de dois fatores habilitadas, como chaves de segurança e aplicativo autenticador.
  2. Habilite os códigos de backup
  3. Seja capaz de fazer login e logout com sucesso com essas chaves de autenticação de dois fatores.
  4. Certifique-se de que a configuração do site para impor logins de dois fatores esteja definida como “não”.
  5. Exclua todos os itens de dois fatores (autenticadores e chaves de segurança) da sua conta de admin usando as ferramentas padrão da interface na aba Segurança das preferências do perfil do usuário admin.
  6. Faça logout.

O que acontece é que, se todos os itens de dois fatores foram removidos, os códigos de backup ainda estão presentes no banco de dados, e a autenticação de dois fatores não é vista como desabilitada no login.

Como não há mais autenticador ou chave de segurança, o usuário não consegue usar os códigos de backup.

Uma vez que todos os autenticadores e chaves foram removidos, os códigos de backup nem sequer podem ser removidos em Perfil - Segurança.

Correção proposta: Quando o último item de segurança for removido do usuário, os códigos de backup também devem ser removidos.

Solução alternativa: remova todos os registros UserSecondFactor para este usuário do banco de dados.

UserSecondFactor.where(user_id: 1).delete_all

12 curtidas

É possível que uma correção seja implementada para isso em uma versão mais recente do Discourse? Acabei de ter exatamente isso acontecendo comigo hoje e foi uma dor de cabeça para recuperar minha conta.

1 curtida

Tenho o mesmo problema com um usuário reclamando que não consegue fazer login. Este usuário teve o 2FA habilitado em sua conta em algum momento, mas depois o removeu. A mensagem de erro que ele recebe ao tentar fazer login é:

O método de dois fatores selecionado não está habilitado para sua conta.

  • No menu de administração, vejo que o perfil do usuário lista “Autenticação de Dois Fatores” como “Não”.

  • Eu não tenho a senha do usuário para empregar esta solução alternativa Admin locked out of site after deleting two-factor keys from prefs - #13 by ewblen e mesmo que tivesse, eu mesmo não tenho nenhum método 2FA para adicionar lá.

  • Como é má prática pedir a senha do usuário, tentei mudar o e-mail dele ou adicionar um e-mail secundário que eu controlo. No entanto, após clicar em “Confirmar” no URL do e-mail de confirmação, recebo este erro:

O método de dois fatores selecionado é inválido.

… e o e-mail não é alterado/adicionado.

  • Eu não tenho acesso ao console ou banco de dados para esta instalação do Discord porque é “gerenciada”.

Há mais alguma coisa que eu possa tentar? Ou o usuário está bloqueado de sua conta para sempre?

Isto é terrível.

Não tenho acesso ao console do discourse, pois esta é uma instância do discourse “hospedada”.

Os administradores precisam ser capazes de limpar a fábrica de 2FA (autenticação de dois fatores) na interface de administração, é extremamente pouco profissional ter que pedir as senhas dos nossos usuários.

Este é claramente um bug importante que precisa ser resolvido. Como podemos relatar formalmente isso e acompanhar o progresso de correção de bugs?

Como um projeto OpenSource com uma instância do discourse hospedada, não consigo acessar o console ou o banco de dados, tenho apenas a interface de administração.

Na verdade, discordo. Quando o 2FA (autenticação de dois fatores) é desativado, os códigos de backup do 2FA (autenticação de dois fatores) devem ser completamente ignorados e não importar em nada.

Ao corrigir isso no lugar errado (quando o último método de 2FA é removido, remova os códigos de backup), ainda temos pessoas que não conseguem fazer login e simplesmente desistiram sem relatar.

Ao corrigir o bug real (considerando os códigos de backup quando o 2FA está desativado), corrigimos isso para 100% dos usuários impactados, imediatamente, em vez de apenas garantir que isso não continue acontecendo com novos usuários.

Funcionou para mim, o usuário me deu a senha.

Você não deve desabilitar o 2FA diretamente, você deve primeiro:

  • remover todos os códigos de backup de 2FA
  • verificar triplamente se todos os códigos de backup de 2FA foram removidos
  • somente então desabilitar o 2FA

Usando este método, você realmente consegue desabilitar o 2FA. Isso é verdade tanto para usuários administradores que simulam usuários para corrigir isso, quanto para qualquer usuário normal que apenas queira desabilitar o 2FA.