prefsから2要素認証キーを削除した後、管理者がサイトからロックアウトされました

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

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

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

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

「いいね!」 1

@Osama コードをいじっている間に、おそらく:

  • ユーザーがこの 2FA を削除した後、再度ログインできなくなる場合(最後の 2FA であり、信頼レベルの設定 / 管理者設定によるとアカウントに 2FA が必要である場合)

  • THEN 最後の 2FA の削除を許可せず、エラーを表示します。

「いいね!」 1

本日、アップグレードされた Discourse バージョン 2.7.10 で同じバグに遭遇したと思われます。

管理権限を付与され、2FA を有効にしました。その後、別のメールアドレスで自分用の 2 番目のユーザーを作成し、管理専用として使用し、そのユーザーに管理権限を付与しました。
次に、元のユーザーから管理権限を削除し、すべての 2FA メソッドを削除しました。現在、元のユーザーは OP が言及したエラー動作を受け取っています。
このサーバーへのコンソールアクセスはありません。サイトは管理者に対して 2FA を強制していません。

この問題を解決するためにコンソールで何をする必要があるか、誰か詳しく教えていただけますか。

ちなみに、私がこのようにした理由は、通常のユーザーとして、サイト上のプライベートグループに対して通常の権限と通知(またはその逆)の対象となり、おそらくメーリングリストモードを有効にしたいからです。通常のユーザーとして 2FA の追加の摩擦は必要ありません。

もちろん、管理ユーザーはすべてを見ることができます。そのため、不必要に詮索しないという信頼にかかっています。そのユーザーはすべての通知をオフにしたままにすることができ、メーリングリストモードを有効にしないことができます。

「いいね!」 1

リカバリーコードは2FAログインフローからしか使用できないため、使用する機会がないと思います。

@sam コンソールでこの問題を解決できると、具体的に何をすべきか言わずに、もったいぶって言っていますね。この特定の問題を修正する方法について、ヒントをいただけると大変助かります。

これは何か役に立ちますか?

「いいね!」 2

いいえ、おそらくそうではありません。アカウントではすでに2FAが無効になっているか、より正確には、アカウントからすべての2FAメソッドを削除しています(プロフィールでは2FAは「いいえ」と表示されています)。それにもかかわらず、ログインはまだ2FAを使用しようとしています。
そのガイドは、2FAが有効になっているが、有効なトークンを生成する手段を失った/忘れたユーザーのためのものです。

解決策:管理者ユーザーとして、ロックアウトされたユーザーの詳細ページにアクセスし、一番下までスクロールして、赤い「なりすまし」ボタンをクリックします。
その後、ユーザー設定で2FAメソッドを追加します。(これを行うには、ユーザーのパスワードが必要です)
2FAシークレットは、ロックアウトされたユーザーに渡す必要があります。
この場合、私自身が両方のユーザーなので、難しい作業ではありません :wink:

「いいね!」 1

素晴らしい。:+1::slightly_smiling_face:

その後、ユーザーから2FAを正常に削除することはできましたか?

いいえ。2FAメソッドを削除したことで、ユーザーは再びロックアウトされました。

2FAを無効にするボタンを押して2FAを削除すると、最後の2FAメソッドを削除するのと動作が異なりますか?つまり、そのボタンを押すとロックアウトされずに削除されますか?

コンソールを使用してこれを再現し、解決策を見つけることができました。

再現手順は、最初の投稿で説明されているものとは少し異なります。手順 2 が重要であり、手順 3 と 4 はそれほど重要ではありません。

  1. 管理者権限を持つ、またはセキュリティキーや認証アプリなどの 2 要素認証キーが 1 つ以上有効になっている最新の Discourse サイトで、ユーザーとしてログインします。
  2. バックアップコードを有効にする
  3. これらの 2 要素認証キーで正常にログインおよびログアウトできること。
  4. 2 要素認証ログインを強制するサイト設定が「いいえ」に設定されていることを確認します。
  5. 管理者アカウントのユーザープロファイル設定のセキュリティタブにある標準の UI ツールを使用して、すべての 2 要素認証項目(認証アプリとセキュリティキー)を削除します。
  6. ログアウトします。

すべての 2 要素認証項目が削除された場合、バックアップコードはデータベースにまだ存在しており、ログイン時に 2 要素認証が無効になっているとは見なされません。

認証アプリやセキュリティキーがなくなったため、ユーザーはバックアップコードを使用できません。

すべての認証アプリとキーが削除された後、プロファイル - セキュリティでバックアップコードを削除することさえできません。

提案される修正:ユーザーから最後のセキュリティ項目が削除されたときに、バックアップコードも削除する必要があります。

回避策:データベースからこのユーザーのすべての UserSecondFactor レコードを削除します。

UserSecondFactor.where(user_id: 1).delete_all

「いいね!」 12

Discourse の新しいバージョンで修正が実装される可能性はありますか?本日、まったく同じ問題が発生し、アカウントを復旧するのが大変でした。

「いいね!」 1

ユーザーがログインできないと訴えているのと同じ問題を抱えています。このユーザーは以前、アカウントに2FAを有効にしていましたが、後に削除しました。ログインしようとすると表示されるエラーメッセージは次のとおりです。

選択された2要素認証方法は、アカウントで有効になっていません。

  • 管理メニューから、ユーザーのプロファイルに「2要素認証」が「いいえ」と表示されていることを確認しました。

  • この回避策 Admin locked out of site after deleting two-factor keys from prefs - #13 by ewblen を実行するためにユーザーのパスワードを持っていません。たとえ持っていたとしても、私自身にはそこに追加できる2FA方法がありません。

  • ユーザーにパスワードを尋ねるのは適切ではないため、メールアドレスを変更したり、私が管理しているセカンダリメールアドレスを追加しようとしました。しかし、「確認」メールのURLで「確認」をクリックした後、次のエラーが表示されます。

選択された2要素認証方法は無効です。

…そして、メールは変更/追加されません。

  • このDiscordインスタレーションは「管理されている」ため、コンソールやデータベースにアクセスできません。

他に試せることはありますか?それとも、ユーザーはアカウントに永久にロックされてしまいますか?

これはひどい。

「ホストされている」Discourseインスタンスであるため、ディスコースコンソールにアクセスできません。

管理者は管理インターフェースから2FAファクトリーをクリアできる必要があります。ユーザーにパスワードを要求するのは非常にプロフェッショナルではありません。

これは明らかに解決が必要な重大なバグです。これを正式に報告し、バグ修正の進捗状況を追跡するにはどうすればよいですか?

ホストされているDiscourseインスタンスを持つオープンソースプロジェクトとして、コンソールやデータベースにアクセスできず、管理インターフェースしかありません。

実際には同意しません。2FAが無効になった場合、2FAバックアップコードは完全に無視され、まったく関係ないはずです。

これを間違った場所(最後の2FAメソッドが削除されたときに、バックアップコードを削除する)で修正することにより、ログインできずに報告を諦めた人々がまだ残っています。

実際のバグ(2FAが無効になっている場合にバックアップコードを考慮する)を修正することにより、影響を受けるすべてのユーザーに対して、すぐに100%修正され、新しいユーザーに継続的に発生しないようにするだけです。

これでうまくいきました。ユーザーがパスワードを教えてくれました。

2FAを直接無効にしてはいけません。まず以下を行う必要があります。

  • すべての2FAバックアップコードを削除する
  • すべての2FAバックアップコードが削除されていることを3回確認する
  • それから2FAを無効にする

この方法を使用すると、実際に2FAを無効にすることができます。これは、管理者がユーザーをなりすましてこれを修正する場合だけでなく、2FAを無効にしたい通常のユーザーにとっても真実です。