E-Mail-Enumerationssicherheitslücke im "Passwort zurücksetzen"-Dialog

OWASP Schwachstellen-ID: WSTG-IDNT-04

Schritte zur Reproduktion:

  1. Versuchen Sie, eine ungültige E-Mail-Adresse im Dialogfeld „Ich habe meine E-Mail vergessen“ zu verwenden:
  2. Versuchen Sie, eine gültige E-Mail-Adresse im Dialogfeld „Ich habe meine E-Mail vergessen“ zu verwenden:

Schwachstellenbeschreibung (von OWASP):

  • Es ist möglich, eine Reihe gültiger Benutzernamen zu sammeln, indem man mit dem Authentifizierungsmechanismus der Anwendung interagiert. Dieser Test ist nützlich für Brute-Force-Tests, bei denen der Tester prüft, ob bei Angabe eines gültigen Benutzernamens das entsprechende Passwort gefunden werden kann.

  • Oft geben Webanwendungen preis, ob ein Benutzername im System vorhanden ist, entweder als Folge einer Fehlkonfiguration oder als Designentscheidung. Manchmal erhalten wir beispielsweise, wenn wir falsche Anmeldeinformationen eingeben, eine Meldung, die besagt, dass entweder der Benutzername im System vorhanden ist oder das angegebene Passwort falsch ist. Die erhaltenen Informationen können von einem Angreifer verwendet werden, um eine Liste von Benutzern im System zu erhalten. Diese Informationen können verwendet werden, um die Webanwendung anzugreifen, beispielsweise durch einen Brute-Force-Angriff oder einen Angriff mit Standardbenutzernamen und -passwörtern.

Vorgeschlagene Korrektur:

  1. Das Dialogfeld „Ich habe meine E-Mail vergessen“ sollte sich unabhängig davon, ob die E-Mail gültig oder ungültig ist, gleich verhalten.

Wir haben die Admin-Einstellung hide email address taken, die das Verhalten dieses Bildschirms ändert:

Vielleicht wäre es gut, diese als Standardeinstellung zu haben? :thinking:

9 „Gefällt mir“

Admin aktivieren - Einstellungen - Login - E-Mail-Adresse ist bereits vergeben ausblenden

E-Mail-Adresse ist bereits vergeben ausblenden

Informieren Sie Benutzer während der Registrierung oder des Passwort-Wiederherstellungsvorgangs nicht darüber, dass ein Konto mit einer bestimmten E-Mail-Adresse existiert. Fordern Sie für Anfragen nach einem vergessenen Passwort die vollständige E-Mail-Adresse an.

Siehe auch Different password reset for wrong username/email (2014 :wink: )

Bearbeiten @JammyDodger war 40 Sekunden schneller

7 „Gefällt mir“

Beim Lesen ist mir aufgefallen, dass dies schon ein paar Mal aufgetaucht ist. Ich denke, einer der anderen wichtigen Punkte ist, dass wir eine Ratenbegrenzung für Anmeldeversuche haben:

3 „Gefällt mir“

Vielen Dank an Sie beide. Ich bin zufällig auf diesen Fehler auf meta.discourse.org gestoßen und kannte diese Einstellung nicht, aber es ist gut zu wissen, dass die Korrektur bereits programmiert ist und der Patch sehr einfach sein sollte. Um die Best Practices von OWASP zu erfüllen, sollte diese Einstellung immer aktiviert sein. Ich weiß nicht, warum ein Administrator dies deaktivieren möchte, da dies eine völlig unnötige Sicherheits- und Datenschutzlücke darstellt, die ausdrücklich gegen branchenübliche Best Practices verstößt. Wenn es einen Grund gibt, diese Option für ältere Installationen beizubehalten, den ich nicht nachvollziehen kann, dann sollte eine Warnung hinzugefügt werden, die darauf hinweist, dass die aktuelle Konfiguration gegen branchenübliche Best Practices verstößt und die konforme Konfiguration stattdessen empfiehlt.

2 „Gefällt mir“

Danke, dass Sie diesen Thread verlinkt haben. @awesomerobot hat das Recht auf seine Meinung, aber er widersetzt sich auch dreist den branchenüblichen Best Practices und besteht darauf, dass ein bekannter, oft gemeldeter und explizit kodifizierter Fehler irgendwie „kein Fehler“ sei, und ich finde seine Meinung im Vergleich zu veröffentlichten branchenüblichen Best Practices nicht sehr überzeugend.

Wenn überhaupt, sollte der Standardwert die sicherere Konfiguration widerspiegeln, und es sollte einen Hinweis geben, der unerfahrene Administratoren darauf hinweist, dass die Deaktivierung dieser Option eine bewusste und unnötige Sicherheits- und Datenschutzlücke auf ihrem Forum darstellt. Ein Link zum OWASP-Eintrag oder so etwas.

Kann mir jemand den Fall erläutern, in dem es vorzuziehen sein könnte, diese Option zu deaktivieren? Ich weiß wirklich nicht, warum dies ein strittiges Thema ist, und würde gerne wissen, ob ich einen Anwendungsfall verpasse, der das Opt-in-Sicherheitsmodell, das mit dieser Einstellung implementiert wird, überflüssig macht. Wenn ein solches Szenario nicht vorgeschlagen werden kann, dann sollte diese Einstellung immer aktiviert sein und daher gar keine Einstellung sein.

1 „Gefällt mir“

Ich denke, derzeit funktioniert alles wie erwartet, daher können wir dies nicht wirklich als Bug einstufen. Wir bewerten unsere Standardeinstellungen jedoch routinemäßig neu, und Sie haben einige interessante Punkte angesprochen, die es wert sind, berücksichtigt zu werden.

Ich werde dies an UX weiterleiten, damit die Unterhaltung dort fortgesetzt werden kann. :+1:

11 „Gefällt mir“

Ganz einfach… Leute können sich schlecht merken, mit welcher E-Mail-Adresse sie ein Konto erstellt haben, und wenden sich zur Fehlerbehebung an die Administratoren.

Dies ähnelt Zweite Faktor erzwingen oder Minimale Passwortlänge — Ich denke, die allgemeine Empfehlung ist, immer einen zweiten Faktor zu verlangen, und die Empfehlungen für die minimale Passwortlänge scheinen jetzt höher zu sein als unser aktueller Standard für normale Benutzer… aber es gibt auch eine Lücke zwischen Sicherheitsempfehlungen und durchschnittlichen Computerkenntnissen.

Ich bin nicht stark dagegen, die Standardeinstellungen zu ändern, aber es ist erwähnenswert, dass sie die Benutzerfreundlichkeit beeinträchtigen können.

10 „Gefällt mir“

Meiner Meinung nach sollten die Standardeinstellungen von Discourse bewährten Praktiken folgen – wie fast jede andere Website.

Es sieht so aus, als ob ich die entsprechende Einstellung in meiner Instanz vorgenommen habe:

Wenn ein Konto mit x@example.com übereinstimmt, sollten Sie in Kürze eine E-Mail mit Anweisungen zum Zurücksetzen Ihres Passworts erhalten.

3 „Gefällt mir“

Ich mag dieses Feedback, aber ich hätte es lieber, wenn es mit etwas mehr Daten untermauert wäre:

Was machen die folgenden Websites?

  • Facebook
  • Twitter
  • Amazon
  • Reddit
  • Yahoo
3 „Gefällt mir“

Vielen Dank für Ihre wertvollen Beiträge und Perspektiven zu diesem Fehler. Für mich ist dies ganz einfach und überhaupt nicht kompliziert: Es gibt einen bekannten Fehler in Discourse, der von Administratoren und Sicherheitsexperten wie mir wiederholt aufgedeckt wurde und der als Funktion und nicht als Sicherheitslücke behandelt wird: NIST: CWE-200: Offenlegung sensibler Informationen gegenüber unbefugten Akteuren.

Die Begründung dieser unsicheren Standardkonfiguration, die gegen bewährte Industriestandards verstößt, indem sie eine hypothetische Situation anführt, in der ein Forenadministrator mit Anfragen von Benutzern über die von ihnen für die Anmeldung verwendeten E-Mails überhäuft wird, ergibt keinen Sinn, da die Verwendung der Seite „Passwort vergessen“ diesen Administrator nicht erfordern würde, unabhängig von der Konfiguration dieser Einstellung: Wenn die sicherere und standardkonforme Einstellung aktiviert ist, würde der Benutzer einfach seine E-Mail-Adresse(n) im Dialogfeld „E-Mail vergessen“ überprüfen und sehen, ob diese Adresse eine E-Mail zum Zurücksetzen des Passworts erhalten hat, genau wie im Dialogfeld erklärt und wie es bei allen modernen, datenschutzfreundlichen und standardkonformen Webanwendungen üblich ist. Darüber hinaus ist die Begründung dieser Verletzung auf der Grundlage der Prämisse, dass andere Websites möglicherweise ebenfalls gegen bewährte Praktiken verstoßen, aus Sicherheits- und Datenschutzsicht kein logisches oder überzeugendes Argument. Ich kann kaum verstehen, warum wir Administratoren die „Funktion“ geben, ihre Discourse-Installation geringfügig weniger sicher und standardkonform zu machen, ohne klaren Nutzen.

Dennoch habe ich die von Ihnen vorgeschlagene Arbeit geleistet, @sam:
‌1. Google: erlaubt keine Benutzeraufzählung.
2. YouTube: erlaubt keine Benutzeraufzählung (da es die Google-Anmeldung verwendet und Google keine Benutzeraufzählung erlaubt).
3. Facebook: erlaubt die Benutzeraufzählung über die Seite „Konto finden“/„Passwort vergessen“ nur dann offiziell, wenn der Benutzer seine E-Mail-Adresse/Telefonnummer bewusst als öffentlich markiert hat, und hat dennoch berühmt 500 Millionen Benutzerdaten durch diese Art von Schwachstelle geleakt, und hat Tausende von Dollar an Sicherheitsprüfer ausgezahlt, die festgestellt haben, dass ihre Ratenbegrenzung und die Regeln „nur wenn explizit als öffentlich markiert“ intern nicht eingehalten wurden.
4. Instagram: erlaubt Benutzeraufzählung (und wurde dafür bestraft). Dies ist ein anderer Hack als der, den ich für Facebook erwähnt habe.
5. X (bitte seien Sie respektvoll gegenüber Deadnaming auf diesem Forum): erlaubt Benutzeraufzählung über die Seite „Passwort vergessen“, implementiert jedoch Ratenbegrenzung und einige andere leicht zu umgehende Hürden und hat dennoch berühmt die Telefonnummern seiner Benutzer durch einen Fehler bei der Implementierung von Ratenbegrenzung und Datenschutzschutz kompromittiert.
6. Baidu: erlaubt Benutzeraufzählung auf der Seite „E-Mail vergessen“ und implementiert Captcha (und vielleicht Ratenbegrenzung? Mein Chinesisch ist schlecht). Interessanterweise erfordert der Wiederherstellungsprozess die Einleitung eines Einspruchs beim Verwaltungsteam und nicht eine einfache Wiederherstellungs-E-Mail. Sehr typisch für die zentrale Kontrolle der KPCh.
7. Wikipedia: erlaubt keine Benutzeraufzählung.
8. Yahoo: erlaubt Benutzeraufzählung über die Seite „Passwort vergessen“, implementiert jedoch Ratenbegrenzung und Captcha. Ich konnte keine Beispiele finden, bei denen Yahoo in Kontroversen geraten oder Hacker bezahlt hätte, die diesen Fehler ausnutzen, aber es ist aus offensichtlichen Gründen sehr schwer, Yahoo in einer Suchmaschine zu finden.
9. Yandex: erlaubt Benutzeraufzählung auf der Anmeldeseite, implementiert Captcha und eine Herausforderungsfrage auf der Seite „E-Mail vergessen“.
10. Whatsapp: erlaubt keine Benutzeraufzählung. Die PC-Anmeldung erfolgt über mobile Anmeldedaten. Mobile Anmeldedaten sind an Ihre Telefonnummer gebunden. Es gibt keine Abmeldeschaltfläche, noch eine Anmeldeseite/E-Mail-vergessen-Seite.
11. XVideos: erlaubt keine Benutzeraufzählung.
12. PornHub: erlaubt keine Benutzeraufzählung.
13. Amazon (E-Commerce-Seite): erlaubt Benutzeraufzählung über die Seite „Passwort vergessen“, was direkt gegen seine eigenen Empfehlungen für bewährte Praktiken für das Cognito-Benutzerpool-Produkt von Amazon Web Services verstößt. Ich konnte keine Beispiele finden, bei denen Amazon in Kontroversen geraten oder Hacker bezahlt hätte, die diesen Fehler ausnutzen, aber es ist aus offensichtlichen Gründen sehr schwer, Amazon in einer Suchmaschine zu finden.
14. Xnxx: erlaubt keine Benutzeraufzählung. Die Hauptseite hat keine Anmeldeseite und die „Gold“-Seite erlaubt keine Benutzeraufzählung. Ich habe eine defekte Anmeldeseite auf der mobilen Version der regulären Seite gefunden, und sie hat einfach keine „E-Mail vergessen“-Funktionalität (und ist anscheinend auch defekt, zugunsten ihrer „Gold“-Website).
15. Tik Tok: erlaubt keine Benutzeraufzählung. Erzwingt MFA auf der Seite „Passwort vergessen“.
(21. Reddit: Erlaubt keine Benutzeraufzählung. Sie entsprechen den bewährten Industriestandards.)

Von den Top 15 Seiten auf dieser Liste erlauben 8/15 KEINE Benutzeraufzählung (oder 9/16, wenn man Reddit mitzählt, und man könnte Facebook 0,5 hinzufügen, da es nur die Aufzählung von Informationen erlaubt, die der Benutzer bewusst öffentlich gemacht hat), und mindestens 3/7 der Seiten aus dieser Liste, die Benutzeraufzählung erlauben, hatten infolgedessen kritische Sicherheitsereignisse.

2 „Gefällt mir“

Das ist einigermaßen irreführend, da das wohl wichtigste Google-Produkt (Gmail) die Aufzählung erlaubt.

Es ist ansonsten trivial, die Existenz von Konten bei E-Mail-Identitätsanbietern zu testen, daher lohnt es sich kaum, sie überhaupt in die Liste aufzunehmen.

Keine der anderen Plattformen in dieser Liste ist (potenziell) selbst gehostete Software.

Es gibt keine zentrale Discourse-Plattform – Website-Administratoren können frei wählen.

Das gesagt, stimme ich zu, dass Website-Administratoren einen Anstoß erhalten sollten, gute Einstellungen als Standard zu wählen.

Vielleicht ein Regler, den Administratoren drehen können (ich zögere, dies zum Assistenten hinzuzufügen), um Einstellungen wie diese einfach zu verschärfen.

4 „Gefällt mir“

Gilt das nicht für jede Website mit einer Anmeldeseite, nicht nur für E-Mail-Dienstanbieter? Ich verstehe Ihren Punkt, dass Anmeldeseiten ein potenzieller Vektor für ähnliche Datenschutz- und Datenlücken sind und daher geschützt werden müssen, aber das ist ein anderer Teil des Benutzerauthentifizierungsflusses, als wir ihn in diesem Thema besprechen. In diesem Thema betrachten wir speziell Lecks aus dem Dialog “Passwort vergessen”. Verstehen Sie mich nicht falsch: Beides ist absolut wichtig, erfordert sorgfältige Aufmerksamkeit und erfordert Abhilfemaßnahmen, um Datenschutz- und Datenlücken zu verhindern. Normalerweise verlangen Sie für Anmeldeformulare ein Captcha, und für Endpunkte “Passwort vergessen” möchten Sie die gleiche Antwort erhalten, unabhängig davon, ob die E-Mail gültig oder ungültig ist. Viele Websites sichern auch den Endpunkt “Passwort vergessen” mit einem Captcha. Beide Endpunkte sollten ratenbegrenzt sein.

Ich habe sicherlich nicht versucht, unredlich zu sein. Ich glaube nicht, dass es in Ordnung ist, nicht konform zu sein, weil andere Websites ebenfalls nicht konform sind, ohnehin keine logisch fundierte Schlussfolgerung ist. Ich habe nur Sams Anfrage erfüllt und seine Bedenken durch die Erfüllung des von ihm gesuchten “Beweises” mit dem von ihm bereitgestellten Link ausgeräumt.

Die MediaWiki-Software wird von Zehntausenden von Websites und Tausenden von Unternehmen und Organisationen verwendet. Sie betreibt Wikipedia und ist eine weitgehend selbst gehostete Software.

Ich ermutige sicherlich die Freiheit der Administratoren, und ich mag es nicht, den Administratoren oder Benutzern das Leben schwer zu machen, aber ich glaube nicht, dass die “Vorteile” dieser Einstellung in irgendeinem Szenario die “Nachteile” überwiegen, und es gibt keinen Fall, in dem ein Administrator diese “Funktion” tatsächlich wünschen würde. So wie wir einem Administrator nicht erlauben, eine maximale Passwortlänge zu erzwingen, sollten wir ihm auch nicht erlauben, die Sicherheit seines Forums unnötigerweise geringfügig zu beeinträchtigen, indem wir diese Enumerationslücke beim Dialog “Passwort vergessen” zulassen. Ich denke, wir sollten die Option einfach ganz entfernen und alle dazu zwingen, den standardkonformen Weg zu gehen. Ich glaube ehrlich gesagt nicht, dass die meisten Administratoren es bemerken oder sich darum kümmern würden, aber es würde einen öffentlich zugänglichen Endpunkt auf allen Discourse-Installationen etwas sicherer machen. Wenn wir die Einstellung einbeziehen müssen, dann sollte sie standardmäßig in der sichereren Position sein, und die unsicherere Position sollte klar abgegrenzt sein, damit unerfahrene Administratoren verstehen, warum sie nicht empfohlen wird. Ich denke jedoch, dass die einfache Umgestaltung dieser Einstellung am besten ist. Ich würde gerne einen PR dafür einreichen.

1 „Gefällt mir“

Ich glaube nicht, dass man eines von beiden isoliert betrachten kann. Im Anmeldevorgang von Discourse gibt es die Meldung „E-Mail bereits vergeben“ und es ist schwer vorstellbar, wie man das anders machen könnte. Solange es das gibt, ist es schwer zu verstehen, was das große Problem mit der Meldung „Wir haben ein Konto gefunden, das übereinstimmt“ speziell ist.

Ich nehme an, es würde einen Unterschied machen in einem Forum, das nur externe Authentifizierung zulässt.

Nachdem ich den Drang überwunden habe, Ihnen nur wegen Ihres Stils zu widersprechen, denke ich, dass Sie in der Sache insoweit Recht haben, als Ihre Position lautet, dass die Standardeinstellung die sicherere Option sein sollte, zumindest wenn externe Authentifizierung verwendet wird. Ich stimme immer noch nicht zu, dass es keinen Platz für die weniger sichere Option gibt (mein Forum hat den Standard-Anmeldevorgang von Discourse, daher plane ich nicht, die Option zum Zurücksetzen des Passworts zu ändern).

Nebenbei bemerkt, ich musste lachen, dass Sie den Leser im Kontext erraten ließen, dass XVideos und Xnxx (aber nicht X) pornografisch sind, aber sich die Mühe gemacht haben, zu erklären, dass Amazon eine „E-Commerce-Website“ ist.

1 „Gefällt mir“

Es sollte Amazon.com von AWS unterscheiden. Und da Sie gefragt haben: AWS erlaubt keine Benutzeraufzählung. :slightly_smiling_face:

Ich stimme zu, dass Sie alle Schritte eines Benutzerauthentifizierungsflusses und deren Zusammenspiel berücksichtigen müssen. Das ist äußerst wichtig und eine der häufigsten Quellen für Sicherheitslücken. Wenn der ähnliche E-Mail-Aufzählungsfehler auf der Anmeldeseite, den Sie erwähnt haben, nicht ordnungsgemäß gemindert wird, sollte er unbedingt behoben werden, unabhängig vom Ergebnis dieses Themas. Es wäre ein Fehler bei der Implementierung von hide_email_address_taken. Die Diskussion über diesen potenziellen Fehler/diese Übersehen sollte wahrscheinlich in einem anderen Thema stattfinden (und wahrscheinlich mit einem bug-Tag).

1 „Gefällt mir“

Nur zur Information: Mit hide email address taken aktiviert, wird diese Meldung auch bei der Anmeldung nicht angezeigt (sie ändert auch die Einladungsnachricht, wenn dort eine vorhandene E-Mail eingegeben wird). :+1:

Ich denke, eine der möglichen Komplikationen, wenn man einfach den Standardwert ändert, ist, dass auch die Funktion „Vollständige E-Mail für Passwortzurücksetzung erforderlich“ integriert ist, was die Dinge wahrscheinlich verkompliziert (obwohl es wahrscheinlich kein vollständiger Blockierer ist).

2 „Gefällt mir“

Danke. Ich werde die Einstellung wahrscheinlich ändern. Ich glaube, etwas in diesem Thema hat mir einen falschen Eindruck vermittelt.

Was bedeutet das? Bedeutet das, dass man keine Passwortzurücksetzung nur mit dem Benutzernamen erhalten kann?

1 „Gefällt mir“

Das ist der Punkt. :+1: Wenn E-Mail-Adresse ist bereits vergeben ausblenden aktiviert ist, müssen Sie die E-Mail-Adresse des Kontos selbst für die Passwortzurücksetzung eingeben und können nicht nur einen Benutzernamen verwenden.

1 „Gefällt mir“

Ich schlage vor, dass wir die hide_email_address_taken SiteSetting umbenennen, sodass sie stattdessen prevent_password_recovery_by_username heißt, und dann das nicht konforme Verhalten aus der App für alle Benutzer refaktorisieren. Dies würde die Passwort-Zurücksetzungsfunktionalität für alle Installationen unverändert beibehalten und gleichzeitig die Schwachstelle der E-Mail-Aufzählung beheben. Ich bin ein erfahrener RoR + Javascript-Entwickler und würde diese Pull-Anfrage gerne implementieren; ich habe mir den Code schnell angesehen und sehe, dass es sich nicht um eine riesige, weitläufige PR handeln würde.

Wenn das Refaktorisieren dieses „Features“ aus dem Dasein heraus wirklich nicht in Frage kommt, dann denke ich immer noch, dass es sinnvoll ist, diese beiden verwandten Konzepte in separate SiteSetting-Einträge zu entkoppeln.

1 „Gefällt mir“
2 „Gefällt mir“