Teilweiser Ausfall einiger Google-OAuth-Funktionen
(trufflesecurity.com)- Bei Diensten, die dem email claim von Google OAuth vertrauen, um Login-Berechtigungen zu bestimmen, können ausgeschiedene Mitarbeitende auch nach ihrer Entfernung aus der Google-Organisation des Unternehmens weiterhin Zugriff auf Apps wie Slack oder Zoom behalten.
- Google-Konten lassen sich auch mit Nicht-Gmail-Adressen erstellen. Durch Aliasse und Plus-Adress-Weiterleitung bei Unternehmens-E-Mails kann ein Google-Konto, das nicht zur Organisation gehört, einen E-Mail-Claim mit der Unternehmensdomain senden.
- Dieses Nicht-Gmail-Konto erscheint weder in der Admin-Oberfläche noch in der Nutzerliste der Google-Organisation des Unternehmens, doch viele Dienste erlauben den Login allein anhand der Domain am Ende der E-Mail-Adresse.
- Organisationen können das Risiko mindern, indem sie Google-Logins deaktivieren und SAML strikt erzwingen. Einige Dienste oder interne Apps bieten diese Option jedoch möglicherweise nicht an oder unterstützen SAML nicht.
- Google wurde am 4. August informiert, am 5. Oktober wurde eine Prämie von $1337 ausgezahlt, und am 16. Dezember erfolgte nach 134 Tagen die Veröffentlichung. Bis zum Veröffentlichungszeitpunkt hatte Google jedoch keine abschwächende Änderung ausgerollt.
Offenlegung der Schwachstelle und Zeitplan
- Aufgrund einer Schwachstelle in Google OAuth können Mitarbeitende, die aus einem Unternehmen offgeboardet und aus der Google-Organisation entfernt wurden, ihren Zugriff auf Anwendungen wie Slack oder Zoom unbegrenzt behalten.
- Bis zum Zeitpunkt der Veröffentlichung hatte Google keine Änderung ausgerollt, die dieses Risiko mindert.
- Der Zeitplan ist wie folgt:
-
- August: Meldung an Google und Hinweis darauf, dass Hunderte von Anwendungen betroffen sein könnten.
-
- August: Das Issue wurde triagiert.
-
- Oktober: Google zahlte $1337 für das Issue.
-
- November: Nichtöffentliche Sammelmeldung an Dutzende betroffene Anwendungen, darunter Zoom und Slack.
-
- Dezember: Veröffentlichung 134 Tage nach der Benachrichtigung von Google.
-
Risiko, den email claim als Identifier zu verwenden
- Der Login von Truffle Securitys Forager war zuvor von einer Microsoft-OAuth-Schwachstelle von Descope betroffen.
- Damals wurde festgestellt, dass ein Email claim gesendet werden kann, der nicht direkt von Microsoft erstellt oder verifiziert wurde, und dass der email claim im Allgemeinen kein vertrauenswürdiger Identifier ist.
- Auch die OIDC-Dokumentation von Google warnt davor, Email als primären Identifier zu verwenden.
- Der Claim
email_verifiedwurde ebenfalls als ungewöhnlicher Punkt behandelt, es konnte jedoch keine Methode gefunden werden, aus einer nicht verifizierten E-Mail einen email claim zu erzeugen. - Es wurden jedoch ausreichend Fälle bestätigt, in denen der email claim selbst missbraucht werden kann.
Nicht-Gmail-Google-Konten und doppelte email claims
- Ein Google-Konto kann auch mit einer bestehenden E-Mail-Adresse erstellt werden, die keine Gmail-Adresse ist.
- Beispielsweise lässt sich ein Google-Konto mit einer Yahoo-E-Mail-Adresse erstellen.
- Dieses Konto kann mit der eingerichteten Nicht-Gmail-Adresse den entsprechenden email claim senden.
- Ein Grund, warum die Google-Dokumentation davon abrät, E-Mail als primären Identifier zu verwenden, ist, dass zwei unterschiedliche Google-Konten denselben email claim senden können.
- Nachdem die Nicht-Gmail-Adresse in den Einstellungen geändert wurde,
- kann mit der E-Mail-Adresse vor der Änderung ein neues Konto erstellt werden, wodurch derselbe email claim möglich wird.
Konten, die außerhalb der Google-Organisation des Unternehmens verbleiben
- Die zentrale Lücke besteht darin, dass sich für E-Mails der Google-Organisation eines Unternehmens mithilfe von E-Mail-Aliassen und Plus-Adress-Weiterleitung Google-Konten außerhalb der Organisation erstellen lassen.
- Plus-Adressen einer Unternehmens-E-Mail können an den Posteingang des ursprünglichen Nutzers weitergeleitet werden.
- Über diesen Ablauf kann ein Plus-Adress-basiertes Nicht-Gmail-Google-Konto mit einer E-Mail der Google-Organisation des Unternehmens erstellt werden. Dieses Konto lässt sich von der Organisation nicht löschen oder offboarden.
- Viele Dienste parsen diese E-Mail und entscheiden anhand der Domain am Ende, ob ein Login erlaubt ist.
- Mit diesem Konto kann man sich bei Zoom registrieren.
- Mit diesem Konto kann man sich bei Slack registrieren.
- Da solche Nicht-Gmail-Google-Konten keine tatsächlichen Mitglieder der Google-Organisation sind, erscheinen sie nicht in den Admin-Einstellungen oder in der Google-Nutzerliste.
Gegenmaßnahmen für Organisationen, Service Provider und Google
- Organisationen können das Risiko mindern, indem sie Google-Logins deaktivieren und SAML strikt erzwingen.
- Bei den meisten Service Providern funktioniert dieser Ansatz.
- Einige Dienste bieten diese Option nicht an.
- Interne Entwicklungsanwendungen können betroffen sein, unterstützen aber möglicherweise kein SAML.
- Service Provider können den HD claim von Google OAuth verwenden.
- Der HD claim sendet die Domain der Google-Organisation, mit der das Konto verbunden ist.
- Bei Konten, die keine Mitglieder einer Google-Organisation sind, ist kein HD claim enthalten.
- Die meisten getesteten Service Provider nutzten statt HD den email claim.
- Beim HD claim bleiben wichtige Einschränkungen bestehen.
- HD ist kein eindeutiger Identifier, sondern lediglich eine Domain.
- Wenn eine Google-Organisation gelöscht und die Domain aufgegeben wird, kann eine andere Person diese Domain übernehmen und eine neue Google-Organisation erstellen.
- Ein Beispiel wäre, wenn Unternehmen A von Unternehmen B übernommen wird, B die Dienste von A einstellt und die frühere Domain nicht verlängert.
- Kauft jemand im Internet die Domain von Unternehmen A, kann diese Person sich in bestehende Service-Konten von Unternehmen A einloggen.
- Service Provider können JIT-Kontoerstellung nicht als Standardfunktion zulassen und stattdessen auf nur per Einladung oder LDAP-Gruppen basierte Konto-Provisionierung umstellen.
- Google könnte breit gegensteuern, indem Google-Konten verboten werden, die mit Domains bestehender Google-Organisationen erstellt werden.
- Google verbietet intern Konten mit
google.com. - Denselben Schutz könnte Google auf andere Organisationen ausweiten.
- Google verbietet intern Konten mit
- Weitere Gegenmaßnahmen auf Google-Seite wären ein Verbot der Registrierung von Google-Konten mit Plus-Adressen, ein Verbot der Registrierung mit Google-E-Mail-Aliassen sowie bessere Admin-Einstellungen, mit denen Organisationen die entsprechenden Optionen konfigurieren können.
Zusätzliche Auswirkungen: Support-E-Mails und Magic-Link-Flows
- Auch ohne anfängliche Zugriffsrechte kann es technisch möglich sein, auf Zoom oder Slack einer Organisation zuzugreifen.
- Dieser Ablauf nutzt Schwachstellenforschung anderer Forscher zu magic link sign-in flows.
- Einige Support- und Ticketsysteme wie Zendesk können Support-Tickets per E-Mail erstellen.
- Mit der E-Mail-Adresse des Support-Tickets kann ein Google-Konto erstellt werden.
- Durch Einsehen des Ticketinhalts könnte die Kontoerstellung abgeschlossen werden.
- Anschließend kann mit dieser Support-E-Mail-Adresse ein OAuth-Login versucht werden.
- Es ist unsicher, die Funktion email to support auf der Hauptdomain beizubehalten; eine mögliche Maßnahme ist, die Zendesk-Support-E-Mail als alternative E-Mail-Adresse zu konfigurieren.
Zweck der Veröffentlichung und verbleibende Probleme
- Dass ehemalige Mitarbeitende auf Plattformen wie Slack oder Zoom Zugriff behalten, geht auf eine Lücke im Google-OAuth-System zurück.
- Google verfügt über die Möglichkeit, umfassende Korrekturen vorzunehmen, die dieses Problem mindern können.
- Ziel der Veröffentlichung ist es, über eine geringfügige Dokumentationsänderung hinaus tatsächliche Änderungen anzustoßen.
- Google triagierte das Issue zwar schnell, doch entgegen der eigenen 90-Tage-Praxis für Verbesserungen wurde das Problem erst am 134. Tag veröffentlicht.
1 Kommentare
Meinungen auf Hacker News
Ich arbeite in diesem Bereich und habe in den letzten 3–4 Jahren bei mehreren Login-Providern und SaaS-Unternehmen mehr als 20 Varianten dieser Schwachstelle behandelt. Der Blogbeitrag ist richtig, aber ich denke, das Kernproblem ist inzwischen zu weit fortgeschritten, um es noch zu beheben. Delegierte Authentifizierung im gesamten Internet ist ein komplettes Durcheinander, und da ich viel mit Ingenieuren von Google und Microsoft gesprochen habe, bin ich sicher, dass sie diese Problemklasse bereits kennen. Würde man das heutige Verhalten ändern, würden jedoch zu viele bestehende Dienste und jahrzehntealte Enterprise-Login-Implementierungen kaputtgehen
Die „Lösung“ zum jetzigen Zeitpunkt ist simpel. Wenn eine Website „Sign in with XYZ“ nutzt, sollte sie der vom Provider gelieferten E-Mail-Adresse nicht vertrauen. Man sollte nicht allein anhand der E-Mail-Domain besondere Rechte vergeben, sondern immer eine eigene Bestätigungs-E-Mail senden, bevor man etwas in der Datenbank als verifiziert markiert. Die großen OAuth-Provider haben auch ihre Dokumentation aktualisiert, um das klarzustellen, und der Artikel selbst weist darauf hin. Deshalb ist es eher überraschend, dass überhaupt eine Prämie gezahlt wurde
In diesem Zusammenhang sollten mehr Service-Provider aufhören, E-Mail als primären Identifier zu verwenden, wie es die Google-Dokumentation empfiehlt. Als wir in Google Apps Benutzernamen geändert haben, habe ich viel Zeit damit verbracht, Probleme bei Slack, Datadog, GoLinks usw. zu beheben
Der richtige Weg hier wäre, eine API bereitzustellen, die zu den Anforderungen der nutzenden Anwendung passt und zusätzliche Verantwortung minimiert. In diesem Fall hätte Google meiner Meinung nach
email_verifiedauffalsesetzen sollen, damit die Anwendung oder ein nachgelagerter IdP erkennen kann, dass eine zusätzliche Verifizierung nötig istWenn
user@domainbereits von Googles Mailservern verarbeitet wird und deshalb Plus-Routing-Regeln angewendet werden, verstehe ich nicht, warum man mit einer E-Mail wieuser+suffix@domainein neues Google-Konto erstellen kann. Selbst ohne Missbrauch scheint das geradezu dafür gemacht, verwirrende Mail-Konfigurationen zu erzeugena+b@domain.comauf eine bestimmte Weise, andere Server möglicherweise nicht. Am Ende sind es zwei verschiedene eindeutige E-Mail-Adressen und sollten im gesamten Internet auch so behandelt werdenuser+suffix@domain. Immerhin ist+XYZin den E-Mail-RFCs festgelegt. Google geht weiter und hat entschieden, dass auch Punkte im Namen als reguläre E-Mail gelten. Zum Beispiel isthi.my.name@google.comdasselbe wiehimyname@google.com, und alle Mails werden an Letzteres geroutetZu der Stelle „Ich war überrascht zu erfahren, dass Microsoft E-Mail-Claims sendet, die Microsoft weder erstellt noch verifiziert hat, und dass E-Mail-Claims im Allgemeinen nicht als vertrauenswürdig gelten“: Auch wenn das ursprünglich vielleicht so beabsichtigt war, finde ich es sehr nützlich, dass OIDC flexibler sein kann. Ich betreibe zum Beispiel einen kostenlosen Login-Anbieter[0], der Identitäten über übergeordnete OIDC-Anbieter oder direkt per E-Mail bei einem vierten Beteiligten, dem Identity Provider (IdP), verifiziert und dabei eine Privacy-Barriere zwischen App und IdP schafft. Mit anderen Worten: Google kann nicht nachverfolgen, bei welchen Apps sich der Nutzer überall anmeldet.
Dass man seine eigene E-Mail-Adresse zu Google mitbringen kann, bedeutet, dass man die Sicherheit und User Experience von Google OIDC mit der Privatsphäre von E-Mail+Passwort bekommen kann – mit dem großen Vorbehalt, dass man nun LastLogin statt Google vertrauen muss. Wir arbeiten auch an einem Protokoll, das diese Abhängigkeit reduziert. Der Aussage „Die Google-Dokumentation hat tatsächlich davor gewarnt, E-Mail als Identifier zu verwenden“ widerspreche ich komplett. E-Mail ist die einzige echte föderierte Identität, die Menschen tatsächlich nutzen. Bis eine bessere Alternative breit ausgerollt ist, sollten wir meiner Ansicht nach E-Mail-Adressen als Identität behandeln.
[0]: https://lastlogin.io
Außerhalb der westlichen Welt sind Mobiltelefone verbreiteter als Computer, und die UI ist in der Regel auch einfacher; daher ist die Telefonnummer eher die Identität. Außerdem übergibt man damit die Identität vollständig an den E-Mail-Anbieter. Gesichtslose Organisationen wie Google können den Zugriff ohne Vorwarnung oder Einspruchsverfahren sperren – und tun das auch –, sodass man alles verlieren kann. Zum Hintergrund: Ich habe Oktas OAuth- und OIDC-Produkte auf den Markt gebracht, den entsprechenden LinkedIn-Kurs erstellt und mache das jetzt wieder bei Pangea Cyber.
Man kann ewig warten, oder man kann anfangen, Lösungen zu bauen.
Mit Portier und dem früheren Mozilla Persona habe ich auch etwas herumgespielt, aber am Ende wirkte der Umgang mit E-Mail-Normalisierung wie ein verlorener oder viel zu schwieriger Kampf. Ich habe mich praktisch damit abgefunden, dass ich sterben werde, bevor eine gute Lösung den Weg bereitet, und meine Aufmerksamkeit auf anderes gelenkt.
Ist das wirklich ein Google-OAuth-Problem, oder eher ein Versagen vieler Service Provider, die Claims im OAuth-Token nicht korrekt zu prüfen, bevor sie Zugriff gewähren? Es sieht nach Letzterem aus.
[1] https://developers.google.com/identity/openid-connect/openid...
user@domainunduser+wildcard@domainsind weiterhin als E-Mail-Adressen verifiziert, die der Nutzer „besitzt“, und liefern daher eine gültige Authentifizierung und Identität für diese E-Mail-Adresse.Das Problem liegt auf der Seite der Google-Organisation-Websites. Ein Administrator kann die Zugangsdaten von Konten oder E-Mail-Adressen, die er nicht sehen kann, nicht widerrufen. Der entscheidende Punkt ist: „Diese Nicht-Gmail-Google-Konten sind tatsächlich keine Mitglieder der Google-Organisation und erscheinen daher nicht in den Admin-Einstellungen oder in der Google-Nutzerliste.“
Wenn man diesem Ablauf folgt, kann man mit der E-Mail-Adresse für Support-Tickets ein Google-Konto erstellen, potenziell den Ticketinhalt einsehen, um die Kontoerstellung abzuschließen, und sich dann mit dieser Support-E-Mail-Adresse per OAuth bei mehreren Diensten anmelden. Das kann viele kleine Unternehmen betreffen.
Meine wichtigste Erkenntnis daraus ist, dass Web-Authentifizierung immer noch ein furchtbares Durcheinander ist.
Die OIDC-Spezifikation sagt, dass E-Mail nicht als eindeutiger Identifier verwendet werden darf. Als Benutzername der Anwendung sollten die Felder
issundsubverwendet werden.Der Grund ist zunächst offensichtlich: E-Mail-Adressen von Nutzern können wiederverwendet werden. Wenn ein Contractor sowohl für Unternehmen A als auch für Unternehmen B arbeitet und beide in einem Authentifizierungsdienst ein Benutzerkonto für diese Person anlegen, kann eine SaaS-Plattform eine einzelne E-Mail-Adresse nicht einem einzigen B2B-Kunden zuordnen. Zweitens ändern sich E-Mail-Adressen. Unternehmen werden übernommen, umbenannt und fusioniert; auch Personennamen ändern sich durch Heirat, Scheidung oder persönliche Entscheidung. SSO in einem Startup zu implementieren, war anfangs wirklich schwierig. Es ist schwer, es richtig zu machen, und man muss die allgemeinen Konzepte sowie OIDC und OAuth2 gut verstehen, bevor man es verwendet. Auth0 hat ein gutes Buch dazu. Wenn man das nicht versteht, implementiert man wahrscheinlich überall Password-Grant-Authentifizierung und macht die Anwendung unsicher.
Klingt wie ein kleines Vorschaubild. So etwas wie OAuth2 gibt es eigentlich nicht. OAuth2 ist nur eine Methode, mit der Großkonzerne ihre eigenen willkürlichen, proprietären Authentifizierungssysteme implementieren. Es ist kein Authentifizierungssystem, sondern ein Werkzeugkasten zum Bau eines Authentifizierungssystems. Deshalb sollte OAuth2 ein Standard werden, tatsächlich sind wir aber in einer Welt gelandet, in der jeder Großkonzern zueinander inkompatible Implementierungen hat. Natürlich entwickeln die Leute passend zu den Use Cases der Großkonzerne, aber dann wird der „Standard“ am Ende so etwas wie die Art, wie Google es macht.
Und jeder hat dann solche kleinen Bugs. Wir sollten zu OAuth1 zurück. Das war ein echter Standard und kein Werkzeugkasten zum Erstellen eines Standards.
Wenn man mit ein paar PCB-Bauteilen eine Schaltung entwirft und Widerstände und Transistoren passend zu Spannungs- und Stromanforderungen einsetzen muss, sollte man dann nicht erwarten, dass das Datenblatt gelesen wird? Wenn man aus einem einfachen Beispiel grob schätzt und einfach durchzieht, funktioniert die Schaltung in vielen Fällen vielleicht, und mit ein wenig Bench-Testing und Probing bekommt man sie vielleicht zum Laufen. Sie kann aber ineffizient sein, oder Bauteile können kurzschließen, was die mittlere Ausfallzeit senkt und Kunden unglücklich macht. Im schlimmsten Fall entzündet sich der Akku und es entsteht echter Schaden. Ist es dann die Schuld des PCB-Modulherstellers, dass das Gerät vorzeitig ausfällt, oder die Verantwortung des Geräteherstellers, der das Datenblatt hätte lesen müssen? An sämtliche Software würde ich keine so strengen Erwartungen stellen, aber wenn es um Authentifizierung und Autorisierung geht, sollten Service-Betreiber meiner Meinung nach gründlich sein. Der Originaltext sagt ebenfalls, dass das Problem nicht existiert, wenn man die Dokumentation befolgt. Alphabet hat ein Bug Bounty gezahlt und die Schwachstelle damit anerkannt; also könnte man Unternehmensadministratoren Controls geben, um Plus-Aliase oder nicht existierende Rollen per Allow-/Deny-List zu verwalten, oder verhindern, dass mit Apps verbundene E-Mails als Claims außerhalb der Organisation übertragen werden. Vermutlich messen sie gerade die Auswirkungen oder priorisieren, ob sie diese messen sollen; da es sich aber um ein Client-Problem handelt, bei dem E-Mail-Claims als autoritativer und dauerhafter angenommen werden, als sie tatsächlich sind, dürfte die Priorität niedrig sein. Die Definition von „Bug“ hängt stark davon ab, wie „erwartetes Verhalten“ definiert wird und wer es erwartet. Aber zumindest weicht es nicht vom beabsichtigten Verhalten ab und ist für Leute, die die Dokumentation richtig verstanden haben, auch nicht unerwartet.
Übersehe ich etwas? Abgesehen vom im Artikel erwähnten Support-System/Zendesk und der Methode mit verwaisten alten Domains wird beim Erstellen eines neuen Google-Kontos als
whatever@mydomain.comeine Verifizierung verlangt. Wie groß ist die reale Ausnutzbarkeit also?Nehmen wir zum Beispiel an, es gibt legitimerweise ein Google-Konto
egamirorrim@mydomain.com. Man kann ein neues Google-Konto mit einer verifizierten E-Mail-Adresse wieegamirorrim+woopsie@mydomain.comerstellen, und bei „Mit Google anmelden“ sendet Google dann den E-Mail-Claimegamirorrim+woopsie@mydomain.com. Wenn man später beimydomain.comentlassen wird, kann man sich mit dem Konto, das mit dem eigentlichenegamirorrim@mydomain.comverbunden ist, nicht mehr anmelden, weil der Administrator es deaktiviert hat. Das neue Google-Kontoegamirorrim+woopsie@mydomain.comist jedoch nicht mit der Organisation verbunden und kann weiterhin verwendet werden. Meiner Ansicht nach wird das allerdings nur dann zum Problem, wenn der Provider Autorisierung ausschließlich anhand des E-Mail-Claims vornimmt. Ich habe früher OIDC verwendet; man sollte den Text des E-Mail-Adress-Claims nicht parsen, um Zugriff auf Ressourcen zu gewähren. Ich verstehe, warum der Autor das kontraintuitiv fand, aber im Artikel steht auch, dass die Dokumentation davor warnt, genau das zu tun. Im Original heißt es: „Die meisten Service Provider, die ich getestet habe, nutzten nicht HD, sondern den E-Mail-Claim“ – gut, aber wofür genau „nutzen“ sie ihn? Funktioniert dieser Trick bei realen Diensten tatsächlich? Wenn ja, sollten sie namentlich genannt werden, damit sie Kritik einstecken. Selbst wenn dieser Wert fälschlich als eindeutig und unveränderlich angenommen wird, entsteht daraus allein nicht zwangsläufig irgendeine Zugriffsberechtigung.