1-Klick-Exploit in Koreas größter mobiler Chat-App entdeckt
(stulle123.github.io)- 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
CommerceBuyActivityin KakaoTalk10.4.3; unzureichende Deep-Link-Validierung, aktiviertes JavaScript und die Offenlegung desAuthorization-Headers führten gemeinsam zum Problem - Die Angriffskette nutzte einen Redirect über
buy.kakao.comund DOM XSS aufm.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.comvom Netz und entfernte den betreffenden Redirect sowie die verwundbareCommerceBuyActivity
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
CommerceBuyActivitybot mehrere für Angreifer günstige Bedingungen- Sie war nach außen exponiert (
exported) und ließ sich über Deep Links wiekakaotalk://buystarten - 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, daComponentoderSelectornicht aufnullbereinigt wurden
- Sie war nach außen exponiert (
- Diese WebView sendete im
Authorization-Header von HTTP-Anfragen ein Access Token mit - WebView-Debugging war aktiviert, sodass sich das Verhalten über
chrome://inspectbeobachten ließ; bei einer Navigation zu einer externen Adresse wurde derAuthorization-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
CommerceBuyActivitylud keine beliebige Angreifer-URL direkt, sondern setzte den übergebenen Deep Link zu einer URL zusammen, die mithttps://buy.kakao.combegann- Beispielsweise wurde
kakaotalk://buy/fooalshttps://buy.kakao.com/foogeladen - Pfad, Query-Parameter und Fragment konnten vom Angreifer kontrolliert werden
- Beispielsweise wurde
- Der Endpunkt
https://buy.kakao.com/auth/0/cleanFrontRedirect?returnUrl=konnte auf beliebigekakao.com-Domains weiterleiten, wodurch sich die Angriffsfläche für die Suche nach XSS auf Subdomains vonkakao.comdeutlich vergrößerte - Auf
m.shoppinghow.kakao.comwurde ein Endpunkt gefunden, bei dem die Suchanfrage an eineninnerHTML-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
CommerceBuyActivitybeliebiges JavaScript ausgeführt und das Access Token aus demAuthorization-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.comzugegriffen 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 Emailgewä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.comenthielt 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.comumgehend vom Netz, entfernte den Redirect/auth/0/cleanFrontRedirect?returnUrl=und beseitigte in späteren Versionen auch die verwundbareCommerceBuyActivity
1 Kommentare
Meinungen auf Hacker News
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.
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.
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.
Kultur kann das in Korea zwar verstärken, aber es passiert eindeutig auch im Westen und ist im Grunde ein universelles Problem.
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.
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.
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.
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.
Als ich Anfang 2015 dort war, war Google so ein Beispiel.
In welcher Sprache hast du denn erwartet, dass eine koreanische App ist – Französisch?
Soweit ich weiß, ist es allerdings weniger echtes Uber als eher ein KakaoTaxi-Proxy mit Uber-Interface.
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.
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.
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.
Wenn nicht, klingt das eher nach einem Server-Bug als nach einem Client-Bug.
Außerdem war Telegram unter den Chat-Apps, die ich bisher genutzt habe, eine der stabilsten, funktionsreichsten und am einfachsten zu bedienenden.
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.
Als Ausländer, der in den letzten neun Jahren in Seoul ein Startup aufgebaut hat, habe ich Ähnliches mehrfach erlebt.
Man muss fragen, ob sie für die lange Strecke gedacht sind oder für kurzfristige Gewinne, die nur wenigen zugutekommen.
Ist bekannt, ob sie in freier Wildbahn ausgenutzt wurde?