20 Punkte von kuroneko 2023-10-27 | 3 Kommentare | Auf WhatsApp teilen
  • Salt Labs entdeckte, dass sich über Schwachstellen in OAuth-Implementierungen Konten bei extrem großen Diensten mit Hunderten Millionen Nutzern wie Booking.com, Grammarly, Vidio und Bukalapak sowie beim Mobile-Framework Expo übernehmen lassen.
  • OAuth ist als Protokoll grundsätzlich sicher, doch je nach Implementierung können kritische Schwachstellen entstehen.
  • Booking.com
    • In der Facebook-OAuth-Implementierung gibt es ein Problem, bei dem sich redirect_uri auf einen anderen Pfad desselben Hosts ändern lässt.
    • Innerhalb von booking.com gibt es einen Endpoint, der an eine in Base64 kodierte Adresse weiterleitet, wenn man sie ihm übergibt.
    • Durch die Kombination dieser beiden Punkte lässt sich der OAuth-Token so manipulieren, dass er an eine andere Adresse weitergeleitet wird.
    • In der Web-Version war die Schwachstelle nicht vorhanden, da redirect_uri bei der Anmeldung geprüft wurde. In der Mobile-Version ließ sich jedoch auch redirect_uri manipulieren, wodurch eine Kontoübernahme möglich war.
    • Mit anderen Worten: Wenn ein Nutzer auf einen sehr legitim wirkenden Link klickt und den OAuth-Ablauf normal durchführt, kann sein Konto übernommen werden.
  • Expo
    • Eine Schwachstelle, die in der eingebauten OAuth-Implementierung des Mobile-Frameworks Expo gefunden wurde.
    • In dieser Implementierung enthält returnUrl eigentlich einen nur für Expo-Apps bestimmten Link wie exp://~~, es besteht jedoch das Problem, dass sich dort auch eine Web-Adresse wie hTTps://~~ eintragen lässt.
      • https:// wird zwar eigentlich blockiert, lässt sich aber allein durch eine Änderung der Groß- und Kleinschreibung umgehen.
    • In diesem Fall werden die returnUrl-Informationen in einem Cookie namens RU gespeichert, und nach Abschluss von OAuth liest der OAuth-Server von Expo dieses Cookie aus und leitet entsprechend weiter.
    • Allerdings erscheint vor dem Wechsel von Expo zu Facebook ein Warnhinweis wie https://~~ wird vertraut ..., den der Nutzer akzeptieren muss.
    • Zur Umgehung wurde eine Methode verwendet, die automatisch zwei Links öffnet.
      • Der erste Link wird geöffnet und sofort wieder geschlossen, um nur das RU-Cookie zu setzen.
      • Der zweite Link stellt direkt den Facebook-OAuth-Link bereit, sodass die RU-Warnmeldung ignoriert wird.
    • Mit dieser Methode gelang die Übernahme von Konten auf Codecademy.com.
    • Die Schwachstelle erhielt die Kennung CVE-2023-28131, und das Expo-Team behob das Problem wenige Stunden nach der ersten Meldung.
  • Grammarly, Vidio, Bukalapak
    • Bei allen drei Websites war eine Kontoübernahme über dieselbe Methode möglich.
    • Zunächst wurde eine legitime Website erstellt, um Facebook-Login-Token zu sammeln.
    • Wenn Vidio und Bukalapak anschließend ein von Facebook ausgestelltes Token erhielten, das eigentlich für eine andere Website erzeugt worden war, funktionierte die Anmeldung dennoch unverändert.
      • Die Schwachstelle entsteht dadurch, dass die App-ID des Facebook-Tokens nicht geprüft wird. (Token-Reuse-Angriff)
    • Bei Grammarly war diese konkrete Schwachstelle nicht vorhanden, da dort statt Tokens ein Code verwendet wird.
    • Es wurde jedoch festgestellt, dass eine Anmeldung möglich ist, wenn man der API zum Senden des Codes statt "code" ein Token unter dem Namen "access_token" übergibt.
    • Damit konnten bei allen drei Websites Konten sofort übernommen werden, sobald auf einer anderen legitimen Website eine Facebook-Verknüpfung durchgeführt wurde.
  • Bei der Implementierung von OAuth müssen mögliche sicherheitskritische Stellen geprüft und alle Verarbeitungsschritte sorgfältig validiert werden, um Schwachstellen zu vermeiden.

3 Kommentare

 
ironlung 2023-10-28

Das ist wirklich alarmierend. Man muss wirklich vorsichtig sein.

 
[Dieser Kommentar wurde ausgeblendet.]
 
kuroneko 2023-10-27

Offenbar hatten überraschend viele sehr große Websites solche Schwachstellen.
Das scheint definitiv eine Funktion zu sein, mit der man sehr vorsichtig umgehen muss.

Einerseits denkt man, man sollte einfach eine Authentifizierungsbibliothek verwenden ...
aber wenn man sich den Fall von Expo ansieht, scheint auch dabei eine eigene Validierung notwendig zu sein.