4 Punkte von GN⁺ 2024-06-27 | 1 Kommentare | Auf WhatsApp teilen
  • In der KakaoTalk-Android-App konnten Deep Links, WebView und XSS so zusammenspielen, dass bereits ein einziger Klick auf einen bösartigen Link zum Abfluss von Access Tokens und sogar zur Kontoübernahme führen konnte
  • Der zentrale Einstiegspunkt war die WebView CommerceBuyActivity in KakaoTalk 10.4.3; unzureichende Deep-Link-Validierung, aktiviertes JavaScript und die Offenlegung des Authorization-Headers führten gemeinsam zum Problem
  • Die Angriffskette nutzte einen Redirect über buy.kakao.com und DOM XSS auf m.shoppinghow.kakao.com, um innerhalb der WebView beliebiges JavaScript auszuführen
  • Die abgeflossenen Tokens konnten für den Zugriff auf Kakao Mail, zum Zurücksetzen des Passworts sowie zur Registrierung der Clients KakaoTalk für PC/Mac oder KiwiTalk verwendet werden
  • Die Schwachstelle erhielt die Kennung CVE-2023-51219; nach der Meldung nahm Kakao Corp. buy.kakao.com vom Netz und entfernte den betreffenden Redirect sowie die verwundbare CommerceBuyActivity

Umfang und Voraussetzungen der Schwachstelle

  • KakaoTalk ist Koreas führende Chat-App mit über 100 Millionen Downloads im Google Play Store und hat den Charakter einer All-in-One-App mit Bezahlen, Fahrdienst, Shopping, E-Mail und mehr
  • In normalen Chats ist Ende-zu-Ende-Verschlüsselung (E2EE) standardmäßig nicht aktiviert, sodass Kakao Corp. technisch auf Nachrichten während der Übertragung zugreifen kann
  • Es gibt zwar die optionale E2EE-Funktion Secure Chat, diese unterstützt jedoch weder Gruppen-Messaging noch Sprachanrufe
  • Ziel des PoC war es, KakaoTalk für Windows/macOS oder den Open-Source-Client KiwiTalk im Konto des Opfers zu registrieren und dadurch nicht Ende-zu-Ende-verschlüsselte Chat-Nachrichten zu lesen

Einstiegspunkt: WebView CommerceBuyActivity

  • Die WebView CommerceBuyActivity bot mehrere für Angreifer günstige Bedingungen
    • Sie war nach außen exponiert (exported) und ließ sich über Deep Links wie kakaotalk://buy starten
    • JavaScript war über settings.setJavaScriptEnabled(true) aktiviert
    • Über das Schema intent:// konnte JavaScript Daten auch an nicht nach außen exponierte App-Komponenten senden
    • Auch die Verarbeitung von intent://-URIs war unzureichend, da Component oder Selector nicht auf null bereinigt wurden
  • Diese WebView sendete im Authorization-Header von HTTP-Anfragen ein Access Token mit
  • WebView-Debugging war aktiviert, sodass sich das Verhalten über chrome://inspect beobachten ließ; bei einer Navigation zu einer externen Adresse wurde der Authorization-Header zusammen mit der GET-Anfrage offengelegt
  • Konnte ein Angreifer in dieser WebView JavaScript ausführen, ließ sich das Access Token des Nutzers bereits durch einen Klick auf einen bösartigen kakaotalk://buy-Deep-Link stehlen

Umgehung der URL-Validierung und Verkettung mit DOM XSS

  • CommerceBuyActivity lud keine beliebige Angreifer-URL direkt, sondern setzte den übergebenen Deep Link zu einer URL zusammen, die mit https://buy.kakao.com begann
    • Beispielsweise wurde kakaotalk://buy/foo als https://buy.kakao.com/foo geladen
    • Pfad, Query-Parameter und Fragment konnten vom Angreifer kontrolliert werden
  • Der Endpunkt https://buy.kakao.com/auth/0/cleanFrontRedirect?returnUrl= konnte auf beliebige kakao.com-Domains weiterleiten, wodurch sich die Angriffsfläche für die Suche nach XSS auf Subdomains von kakao.com deutlich vergrößerte
  • Auf m.shoppinghow.kakao.com wurde ein Endpunkt gefunden, bei dem die Suchanfrage an einen innerHTML-Sink übergeben wurde, sodass mit einer einfachen Payload DOM XSS möglich war
  • Zusätzlich wurde eine zuvor vorhandene Stored-XSS-Schwachstelle entdeckt; Stand Mai 2024 schien diese jedoch bereits behoben zu sein
  • Durch diese Kombination konnte nach dem Klick auf einen bösartigen Deep Link innerhalb der WebView CommerceBuyActivity beliebiges JavaScript ausgeführt und das Access Token aus dem Authorization-Header nach außen übertragen werden

Zugriff auf Kakao Mail und Kontozurücksetzung über Tokens

  • Das abgeflossene KakaoTalk-Access-Token konnte für den Zugriff auf das Kakao-Mail-Konto des Opfers verwendet werden
  • Nach Prüfung, ob das Opfer Kakao Mail nutzte, war ein Ablauf möglich, bei dem ein separates Token bezogen und anschließend auf talk.mail.kakao.com zugegriffen wurde
  • Selbst wenn das Opfer kein Kakao-Mail-Konto hatte, konnte im Namen des Opfers ein neues Konto erstellt werden; wurde beim Anlegen einer neuen E-Mail-Adresse Set As Primary Email gewählt, konnte die bisher registrierte E-Mail-Adresse ohne zusätzliche Bestätigung überschrieben werden
  • Nach dem Zugriff auf Kakao Mail war das Zurücksetzen des KakaoTalk-Passworts der nächste Schritt
    • Zusätzlich benötigte Daten des Opfers wie E-Mail-Adresse, Nickname und Telefonnummer ließen sich aus demselben API-Aufruf für Kontoeinstellungen gewinnen
    • Der Passwort-Reset-Prozess auf accounts.kakao.com enthielt zwar SMS-2FA, ließ sich aber durch Abfangen und Manipulieren von Requests und Responses mit Burp in einen E-Mail-Bestätigungsfluss umwandeln
    • Den Bestätigungscode konnte man im Kakao-Mail-Postfach des Opfers einsehen

Registrierung des PC-Clients und Zugriff auf Nachrichten

  • Bei der Anmeldung mit den Zugangsdaten des Opfers in KakaoTalk für Windows/macOS oder KiwiTalk war ein zweiter Authentifizierungsfaktor erforderlich
  • Diese Authentifizierung nutzte eine 4-stellige PIN; die PIN wurde entweder in der PC-Version angezeigt und in die mobile App eingegeben oder umgekehrt an die mobile App gesendet und dann in die PC-App eingetragen
  • Die PIN war nicht leicht per Brute Force zu erraten, und der betreffende Endpunkt war durch ein Rate Limit mit Sperre nach 5 Versuchen geschützt
  • Mit dem abgeflossenen Access Token konnte die PIN jedoch an das KakaoTalk-Backend übermittelt oder von dort abgefragt werden
  • So konnte im PoC ein vom Angreifer kontrolliertes Gerät im KakaoTalk-Konto des Opfers registriert und auf nicht Ende-zu-Ende-verschlüsselte Chat-Nachrichten zugegriffen werden

Offenlegung, Behebung und Forschungsmaterial

  • Die Schwachstelle erhielt die Kennung CVE-2023-51219
  • Der Forscher veröffentlichte Werkzeuge, damit andere Sicherheitsforscher die große Angriffsfläche von KakaoTalk analysieren können
  • Die Schwachstelle wurde im Dezember 2023 über das Kakao Bug Bounty Program gemeldet
  • Der Melder erklärte, keine Prämie erhalten zu haben, da die Teilnahmeberechtigung für Belohnungen auf koreanische Staatsangehörige beschränkt sei
  • Kakao Corp. nahm https://buy.kakao.com umgehend vom Netz, entfernte den Redirect /auth/0/cleanFrontRedirect?returnUrl= und beseitigte in späteren Versionen auch die verwundbare CommerceBuyActivity

1 Kommentare

 
GN⁺ 2024-06-27
Meinungen auf Hacker News
  • Wenn man in Korea lebt, ist es schwer, ohne Kakao auszukommen. Da die App sogar von der Generation der Großmütter genutzt wird, ist es besorgniserregend, dass sie so viele Sicherheitslücken hat.
    Besonders wenn die Schwachstelle Domains betrifft, die legitim aussehen, ist es für eine Großmutter schwer, verdächtige Links zu erkennen. Auch Koreas hierarchische Arbeitskultur spielt meiner Ansicht nach eine Rolle.
    Vorgesetzte setzen Feature-Deadlines als nicht verhandelbar, Sicherheitslücken sind unsichtbar, die UI aber sichtbar – also wird grob gekürzt und veröffentlicht.
    Am Ende entsteht eine App voller Sicherheitslücken, und ich glaube nicht, dass sie das ernsthaft beheben werden, bevor der Kakao-Aktienkurs fällt.
    • Ich bin Koreaner, nutze aber weder KakaoTalk noch LINE noch Facebook. Das ist zwar etwas ungewöhnlich, aber viele Dienste bieten SMS-Alternativen an, sodass man auch ohne sie leben kann.
      Beim Thema Sicherheit glaube ich eher nicht, dass es an Koreas Arbeitskultur liegt, denn die großen IT-Unternehmen, die unter „Nekarakubae“ zusammengefasst werden – Naver, Kakao, LINE, Coupang, Woowa Bros –, haben im Vergleich zum Durchschnitt meist eine deutlich bessere Arbeitskultur und Vergütung.
      Wahrscheinlich liegt es eher daran, dass es eine App für den heimischen Markt ist und deshalb nicht so gründlich geprüft wurde wie weltweit populäre Apps. Nach meiner Erfahrung war die Vergütung allerdings niedriger als in den USA oder bei manchen koreanischen Startups.
    • Unmögliche Deadlines und hierarchische Arbeitskulturen gibt es nicht nur in Korea, sondern weltweit.
      Der Unterschied scheint zu sein, dass in Korea der Regierungssektor und die Chaebols einen großen Anteil am IT-Markt haben, sodass kaum Raum bleibt, in dem Startup-Kultur einen Unterschied machen kann.
      Kakao war auch einmal ein cooles Startup, aber seit dem Erfolg wirkt es, als versuche es, Chaebols nachzueifern.
    • Dass Chefs oder Kunden die UI sehen können, aber Sicherheitsprobleme nicht, ist kein rein koreanisches Phänomen.
      Kultur kann das in Korea zwar verstärken, aber es passiert eindeutig auch im Westen und ist im Grunde ein universelles Problem.
    • Ich frage mich, ob dieses Problem in koreanischen Nachrichten oder bei Aufsichtsbehörden landen könnte. Abgesehen vom Aktienkurs könnte es auch Wege zur Rechenschaft geben.
    • Hierarchische Arbeitskultur wird oft als Allzweckausrede benutzt, wenn Amerikaner etwas erklären wollen, das ihnen in Ostasien nicht gefällt.
      Wer ein paar Jahre in einem halbwegs großen Bürojob in den USA war, besonders in Tech, Finance, Consulting oder bei FAANG, weiß, dass es im Westen genauso ist.
      Mid-Level Engineers stimmen VPs zu, um in den nächsten Beförderungszyklus zu kommen, und Firmen sind nur gut darin, „flache Organisationen“ zu vermarkten – in der Praxis ist das eher PR-Text.
      Wenn ein PM oder SVP Anweisungen gibt, fragt kaum jemand direkt nach; viele murren und führen es aus. Noch bitterer ist, dass der Glaube an dieses Kulturmarketing solcher Firmen zu einem oberflächlichen Überlegenheitsgefühl führt.
  • Interessant ist, dass westliche Ride-Sharing-Apps in Korea nicht richtig funktionieren und dieses Unternehmen auch Koreas führende Ride-Hailing-App entwickelt.
    Bei einer kürzlichen Reise nach Seoul musste ich ein Konto bei der mobilen Chat-App erstellen, um mich in dieser App anzumelden; die User Experience war schlecht, und da fast alles auf Koreanisch war, hatte ich ziemlich zu kämpfen.
    Es wirkte auf mich nicht besonders professionell betrieben.
    • Als ich vor ein paar Jahren in Korea lebte, fand ich interessant, dass sich dort ein eigenes App- und Service-Ökosystem gebildet hat.
      KakaoTalk und Naver übernahmen im Wesentlichen Rollen wie WhatsApp/Meta und Google im Westen.
      Ich finde es beeindruckend, dass sie trotz wachsender Konkurrenz durch multinationale Unternehmen überlebt haben. In vielen anderen Ländern sind lokale Tech-Firmen in den letzten zehn Jahren fast bedeutungslos geworden, und das ist schade.
    • Als ich vor etwa fünf Jahren dort war, konnte ich keine Taxi-App nutzen, weil ich kein koreanisches Bankkonto hatte.
      Deshalb war es auch schwierig, auf der Straße ein Taxi anzuhalten; die meisten schienen nur Fahrgäste mitzunehmen, die per App bestellt hatten.
      Einmal kam ich gerade so mit einem Taxifahrer in Kontakt, aber er wollte mich nicht mitnehmen, weil ich „Ausländer“ war. Ich weiß nicht, ob es echte Abneigung war, ob er keine Barzahlung wollte, ob es an der Sprachbarriere lag oder ob es ein Missverständnis war.
      Eine spätere erfolgreiche Taxifahrt führte dann über einen Berg auf die andere Seite der Stadt, sodass ich die Person anrufen musste, mit der ich ein Date hatte, damit sie dem Fahrer erklärte, dass der Weg falsch war. Ich halte das für ein Risiko, wenn man unvorbereitet in ein fremdes Land reist.
    • Was mich in Korea überraschte, war, wie viele lokale Alternativen es zu Tech-Produkten gab, von denen ich dachte, sie würden weltweit genutzt, und wie wenig Marktdurchdringung die globalen/US-Versionen hatten.
      Als ich Anfang 2015 dort war, war Google so ein Beispiel.
    • Ich verstehe nicht, was die naheliegende Tatsache, dass eine koreanische App „größtenteils“ auf Koreanisch war, mit schlechter User Experience oder mangelnder Professionalität zu tun haben soll.
      In welcher Sprache hast du denn erwartet, dass eine koreanische App ist – Französisch?
    • Wie andere schon gesagt haben, funktioniert Uber in Korea, zumindest in Seoul.
      Soweit ich weiß, ist es allerdings weniger echtes Uber als eher ein KakaoTaxi-Proxy mit Uber-Interface.
  • Eine kleine Korrektur ist nötig: KakaoTalk ist keine „All-in-one“-App wie WeChat.
    In der Haupt-Chat-App gibt es Zusatzfunktionen wie Geschenke, die diese Schwachstelle ermöglicht haben, aber Taxi-Rufe laufen nicht über KakaoTalk, sondern über die Mobility-App Kakao T, die auch Mietroller, E-Bikes sowie Zug- und Flugbuchungen anbietet.
    Es gibt zwar eine Verknüpfung mit der Zahlungsplattform KakaoPay, aber der Dienst selbst liegt in einer separaten App; das ist eher wie Google auf Android, wo man über eine zentrale ID auf mehrere Dienste zugreift.
    Daher denke ich, dass die vielen Einstiegspunkte in der App wohl mit der Integration eigener Dienste zusammenhängen.
    • Das ist nicht korrekt.
      Wie bei WeChat ist KakaoPay ausreichend in KakaoTalk integriert, sodass die meisten Nutzer KakaoPay nur innerhalb von KakaoTalk verwenden und nicht über die KakaoPay-App.
      Dass es eine separate KakaoPay-App gibt, macht keinen großen Unterschied; auch ohne die KakaoPay-App kann man in KakaoTalk Geld senden, empfangen und bezahlen.
  • Dass nur Koreaner eine Belohnung erhalten können – an diesem Punkt denke ich, sie haben es fast verdient, von Hackern erwischt zu werden.
    • Selbst für Koreaner beträgt die maximale Belohnung nur etwa 7.000 Dollar; für eine App, die nach mehreren Sicherheitsproblemen aussieht, ist das absurd niedrig.
    • Das schafft Anreize, Bugs zu verkaufen.
  • Ich erinnere mich daran, wie der Telegram-Gründer damit prahlte, dass ein einzelner Entwickler den Mobile Client betreue, um das Talent des Teams hervorzuheben.
    Wie sich herausstellte, war dieser Client voller Bugs, die Nachrichten dem falschen Nutzer anzeigten.
    Mobile Chat-Apps sollte man nicht nach dem Motto „move fast and break things“ entwickeln; ich denke, bei einer All-in-one-App wie Kakao ist das eine natürliche Folge.
    • Ich frage mich, ob damit gemeint ist, dass mehrere Nutzerkonten in der mobilen App hinzugefügt waren und Nachrichten eines Kontos bei einem anderen Konto angezeigt wurden.
      Wenn nicht, klingt das eher nach einem Server-Bug als nach einem Client-Bug.
    • Chat-Apps sind schwierig, und konkurrierende Apps hatten viele ähnliche Bugs; deshalb sehe ich das allein nicht als Beleg für schlechte Qualität.
      Außerdem war Telegram unter den Chat-Apps, die ich bisher genutzt habe, eine der stabilsten, funktionsreichsten und am einfachsten zu bedienenden.
    • Zur Verteidigung von Telegram: Ähnliche Dinge sind auch bei großen Diensten wie Facebook, Google und Apple oft passiert.
    • Auch Software, die per Committee-Design entsteht, kann schreckliche Bugs haben.
    • Kakao bewegt sich definitiv nicht schnell.
  • Schockierend ist, dass jemand die Schwachstelle im Dezember 2023 über Kakaos Bug Bounty Program gemeldet hat, aber nichts bekommen konnte, weil nur Koreaner eine Belohnung erhalten können.
    • Zumindest ist die Einschränkung auf der Bug-Bounty-Website veröffentlicht.
      Dort steht, man müsse „Koreaner mit Wohnsitz im In- oder Ausland“ sein.
      https://bugbounty.kakao.com/home
      Es wäre schlimmer gewesen, wenn jemand in der Erwartung eingereicht hätte, Geld zu bekommen, und erst später erfahren hätte, dass es auf koreanische Staatsbürger beschränkt ist.
      Außerdem sind die Belohnungen sehr niedrig: ab mindestens 50.000 Won, etwa 35 Dollar, bis maximal 10 Millionen Won, etwa 7.100 Dollar.
    • In Korea ist so etwas ziemlich üblich.
      Als Ausländer, der in den letzten neun Jahren in Seoul ein Startup aufgebaut hat, habe ich Ähnliches mehrfach erlebt.
  • Wir sollten einen Schritt zurücktreten und die heutigen Software-Engineering-Methoden neu überdenken.
    Man muss fragen, ob sie für die lange Strecke gedacht sind oder für kurzfristige Gewinne, die nur wenigen zugutekommen.
  • Ich frage mich, wie stark US-Militärangehörige in Korea von dieser Schwachstelle betroffen waren.
    Ist bekannt, ob sie in freier Wildbahn ausgenutzt wurde?
  • Der Dienst existiert seit mehr als zehn Jahren und hat immer noch keine Web-Version, aber angesichts dieser Nachricht ist das vielleicht sogar ein Glück.
    • Ich wünschte trotzdem, es gäbe eine Web-Version. Es ist nämlich schwierig, die Kakao-App unter Linux mit wine stabil zum Laufen zu bringen.