Admin vom Site ausgesperrt, nachdem er Zwei-Faktor-Schlüssel aus den Einstellungen gelöscht hat

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 „Gefällt mir“

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 „Gefällt mir“

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 „Gefällt mir“

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

1 „Gefällt mir“

@Osama während du im Code bist, vielleicht:

  • WENN der Benutzer sich nach dem Löschen dieser 2FA nicht erneut anmelden darf (letzte 2FA, die sie haben, und 2FA ist für das Konto gemäß den Vertrauensstufeneinstellungen / Admineinstellungen erforderlich)

  • DANN erlaube ihnen nicht, die letzte 2FA zu löschen und zeige einen Fehler an.

1 „Gefällt mir“

Ich glaube, ich wurde vom selben Fehler getroffen (Discourse-Version 2.7.10, heute aktualisiert).

Mir wurden Administratorrechte gewährt und 2FA aktiviert. Später erstellte ich einen zweiten Benutzer für mich von einer anderen E-Mail-Adresse, der ausschließlich für die Administration verwendet werden sollte, und erteilte diesem Administratorrechte.
Dann entzog ich meinem ursprünglichen Benutzer die Administratorrechte und löschte alle 2FA-Methoden. Jetzt erhält mein ursprünglicher Benutzer das vom OP erwähnte Fehlerverhalten.
Ich habe keinen Konsolenzugriff auf diesen Server. Die Website erzwingt 2FA nicht für Administratoren.

Könnte bitte jemand detailliert beschreiben, was genau auf der Konsole getan werden muss, um dieses Problem zu beheben?

Übrigens ist der Grund, warum ich das getan habe, dass ich über meinen normalen Benutzer normalen Berechtigungen und Benachrichtigungen (oder nicht) für private Gruppen auf der Website unterliegen möchte, vielleicht mit aktiviertem E-Mail-Listenmodus. Als normaler Benutzer benötige ich nicht die zusätzliche Reibung von 2FA.

Natürlich kann der Admin-Benutzer alles sehen, daher vertraue ich darauf, dass er nicht unnötig schnüffelt. Dieser Benutzer kann alle Benachrichtigungen ausgeschaltet lassen und den E-Mail-Listenmodus nicht aktivieren.

1 „Gefällt mir“

Ich glaube, Sie erhalten nicht die Möglichkeit, Wiederherstellungscodes zu verwenden, da diese nur über den 2FA-Anmeldevorgang verwendet werden können?

@sam Sie sagen auf verlockende Weise, dass dieses Problem über die Konsole gelöst werden kann, ohne zu sagen, was genau getan werden muss. Ich würde mich sehr über einen Hinweis freuen, wie dieses spezielle Problem behoben werden kann.

Ist das eine Hilfe?

2 „Gefällt mir“

Ich vermute nicht, da das Konto bereits die 2FA deaktiviert hat, oder genauer gesagt, alle 2FA-Methoden von seinem Konto entfernt hat (2FA wird im Profil als „nein“ angezeigt), aber die Anmeldung versucht dennoch, 2FA zu verwenden.
Diese Anleitung ist für einen Benutzer, der 2FA aktiviert hat, aber seine Mittel zur Generierung eines gültigen Tokens verloren hat oder vergessen hat.

LÖSUNG: Besuchen Sie als Administrator die Detailseite des ausgesperrten Benutzers, scrollen Sie ganz nach unten und klicken Sie auf die rote Schaltfläche Impersonate.
Gehen Sie dann in den Benutzereinstellungen eine 2FA-Methode hinzu. (Sie benötigen das Passwort des Benutzers, um dies zu tun)
Das 2FA-Geheimnis muss dem ausgesperrten Benutzer mitgeteilt werden.
In diesem Fall bin ich beide Benutzer, also keine schwierige Aufgabe :wink:

1 „Gefällt mir“

Gut gemacht. :+1::slightly_smiling_face:

Konnten Sie danach die 2FA erfolgreich vom Benutzer entfernen?

Nein. Das Entfernen der 2FA-Methode hat den Benutzer wieder ausgesperrt.

Verhält sich das Entfernen von 2FA durch Drücken der Schaltfläche “Alle deaktivieren” anders als das Entfernen der letzten 2FA-Methode? D. h. wird es durch Drücken dieser Schaltfläche entfernt, ohne dass Sie ausgesperrt werden?

Ich konnte dies reproduzieren und eine Lösung über die Konsole finden.

Die Reproduktion unterscheidet sich leicht von der Beschreibung im ersten Beitrag. Schritt 2 ist entscheidend, die Schritte 3 und 4 sind weniger wichtig.

  1. Seien Sie ein Admin Benutzer auf einer aktuellen Discourse-Website mit einem oder mehreren aktivierten Zwei-Faktor-Schlüsseln, wie z. B. Sicherheitsschlüsseln und Authentifizierungs-Apps.
  2. Backup-Codes aktivieren
  3. Erfolgreich mit diesen Zwei-Faktor-Schlüsseln ein- und ausloggen können.
  4. Sicherstellen, dass die Website-Einstellung für die Erzwingung von Zwei-Faktor-Logins auf „nein“ gesetzt ist.
  5. Alle Zwei-Faktor-Elemente (Authentifikatoren und Sicherheitsschlüssel) von Ihrem (Admin)-Konto über die Standard-UI-Tools im Tab Sicherheit der Präferenzen des Admin-Benutzerprofils löschen.
  6. Ausloggen.

Es passiert, dass, wenn alle Zwei-Faktor-Elemente entfernt wurden, die Backup-Codes immer noch in der Datenbank vorhanden sind und die Zwei-Faktor-Authentifizierung beim Login nicht als deaktiviert angesehen wird.

Da kein Authentifikator oder Sicherheitsschlüssel mehr vorhanden ist, kann der Benutzer die Backup-Codes nicht verwenden.

Sobald alle Authentifikatoren und Schlüssel entfernt wurden, können die Backup-Codes auch nicht mehr unter Profil - Sicherheit entfernt werden.

Vorgeschlagene Korrektur: Wenn das letzte Sicherheitselement vom Benutzer entfernt wird, sollten auch die Backup-Codes entfernt werden.

Workaround: Alle UserSecondFactor-Datensätze für diesen Benutzer aus der Datenbank entfernen.

UserSecondFactor.where(user_id: 1).delete_all

12 „Gefällt mir“

Ist es möglich, dass in einer neueren Version von Discourse eine Lösung implementiert werden kann? Mir ist heute genau dasselbe passiert und es war eine Qual, mein Konto zurückzubekommen.

1 „Gefällt mir“

Ich habe das gleiche Problem mit einem Benutzer, der sich beschwert, dass er sich nicht anmelden kann. Bei diesem Benutzer war zu einem bestimmten Zeitpunkt die Zwei-Faktor-Authentifizierung (2FA) aktiviert, wurde aber später entfernt. Die Fehlermeldung, die er beim Versuch der Anmeldung erhält, lautet:

Die ausgewählte Zwei-Faktor-Methode ist für Ihr Konto nicht aktiviert.

  • Im Admin-Menü sehe ich, dass im Profil des Benutzers “Zwei-Faktor-Authentifizierung” als “Nein” aufgeführt ist.

  • Ich habe nicht das Passwort des Benutzers, um diesen Workaround anzuwenden Admin locked out of site after deleting two-factor keys from prefs - #13 by ewblen, und selbst wenn ich es hätte, hätte ich selbst keine 2FA-Methoden, die ich dort hinzufügen könnte.

  • Da es schlechter Stil ist, den Benutzer nach seinem Passwort zu fragen, habe ich versucht, seine E-Mail zu ändern oder eine sekundäre E-Mail hinzuzufügen, die ich kontrolliere. Nach dem Klicken auf “Bestätigen” in der Bestätigungs-E-Mail-URL erhalte ich jedoch diese Fehlermeldung:

Die ausgewählte Zwei-Faktor-Methode ist ungültig.

… und die E-Mail wird nicht geändert/hinzugefügt.

  • Ich habe keinen Zugriff auf die Konsole oder die Datenbank für diese Discord-Installation, da sie “verwaltet” wird.

Gibt es noch etwas, das ich versuchen kann? Oder ist der Benutzer für immer von seinem Konto ausgesperrt?

Das ist furchtbar.

Ich habe keinen Zugriff auf die Discourse-Konsole, da dies eine „gehostete“ Discourse-Instanz ist.

Administratoren müssen die 2FA-Werkseinstellungen über die Admin-Oberfläche löschen können. Es ist äußerst unprofessionell, unsere Benutzer nach ihren Passwörtern fragen zu müssen.

Dies ist eindeutig ein schwerwiegender Fehler, der behoben werden muss. Wie können wir dies formell melden und den Fortschritt der Fehlerbehebung verfolgen?

Als Open-Source-Projekt mit einer gehosteten Discourse-Instanz habe ich keinen Zugriff auf die Konsole oder die Datenbank, sondern nur auf die Admin-Oberfläche.

Eigentlich stimme ich nicht zu. Wenn 2FA deaktiviert ist, sollten 2FA-Backup-Codes vollständig ignoriert werden und überhaupt keine Rolle spielen.

Indem wir dies an der falschen Stelle beheben („wenn die letzte 2FA-Methode entfernt wird, entfernen Sie die Backup-Codes“), haben wir immer noch Leute, die sich nicht anmelden können und einfach aufgegeben haben, ohne es zu melden.

Indem wir den eigentlichen Fehler beheben (Berücksichtigung von Backup-Codes bei deaktivierter 2FA), beheben wir dies für 100 % der betroffenen Benutzer sofort, anstatt nur sicherzustellen, dass dies neuen Benutzern nicht ständig passiert.

Hat bei mir funktioniert, der Benutzer hat mir das Passwort gegeben.

Sie dürfen 2FA nicht direkt deaktivieren, Sie müssen zuerst:

  • Alle 2FA-Backup-Codes entfernen
  • Alle 2FA-Backup-Codes dreimal überprüfen, ob sie entfernt wurden
  • Erst dann 2FA deaktivieren

Mit dieser Methode können Sie 2FA tatsächlich deaktivieren. Dies gilt sowohl für Admin-Benutzer, die Benutzer impersonieren, um dies zu beheben, als auch für jeden normalen Benutzer, der 2FA einfach deaktivieren möchte.