Kore'nin en büyük mobil sohbet uygulamasında bulunan 1 tıklamalı exploit
(stulle123.github.io)- KakaoTalk Android uygulamasında derin bağlantı, WebView ve XSS'in birleşimi, kullanıcının kötü amaçlı bir bağlantıya yalnızca bir kez tıklamasıyla erişim belirtecinin sızdırılmasına ve hesap ele geçirmeye kadar gidebiliyordu
- Temel giriş noktası, KakaoTalk
10.4.3içindekiCommerceBuyActivityWebView'uydu; yetersiz derin bağlantı doğrulaması, etkin JavaScript veAuthorizationbaşlığının açığa çıkması birlikte sorunu oluşturuyordu - Saldırı zinciri,
buy.kakao.comyönlendirmesi vem.shoppinghow.kakao.comüzerindeki DOM XSS kullanılarak WebView içinde rastgele JavaScript çalıştırma yöntemine dayanıyordu - Sızdırılan belirteç, Kakao Mail erişimi, parola sıfırlama ve Windows/Mac için KakaoTalk veya KiwiTalk istemcisini kaydetmek için kullanılabiliyordu
- Zafiyet CVE-2023-51219 olarak tanımlandı ve bildirimden sonra Kakao Corp.
buy.kakao.comalanını kapattı, ilgili yönlendirmeleri ve zafiyetliCommerceBuyActivity'yi kaldırdı
Zafiyetin kapsamı ve varsayımları
- KakaoTalk, Google Play Store'da 100 milyondan fazla indirilen, ödeme, araç çağırma, alışveriş ve e-posta gibi işlevleri içeren Kore'nin önde gelen sohbet uygulaması ve bir tür hepsi bir arada uygulama niteliği taşıyor
- Normal sohbet odalarında uçtan uca şifreleme (E2EE) varsayılan olarak açık değil; bu nedenle Kakao Corp. iletim halindeki mesajlara erişebilecek bir yapıya sahip
- İsteğe bağlı E2EE özelliği olan Secure Chat mevcut, ancak grup mesajlaşmasını veya sesli aramaları desteklemiyor
- PoC'nin amacı, kurban hesabına Windows/macOS için KakaoTalk veya açık kaynak istemci KiwiTalk kaydederek uçtan uca şifrelenmeyen sohbet mesajlarını okumaktı
Giriş noktası: CommerceBuyActivity WebView
CommerceBuyActivityWebView, saldırgan için avantajlı birden çok koşula sahipti- Dışarıya açık (
exported) durumdaydı vekakaotalk://buygibi derin bağlantılarla başlatılabiliyordu settings.setJavaScriptEnabled(true)ile JavaScript etkindi- JavaScript,
intent://şeması üzerinden dışarıya açık olmayan uygulama bileşenlerine bile veri gönderebiliyordu intent://URI'lerindekiComponentveyaSelectoralanlarınınnullyapılmaması nedeniyle URI işleme de yetersizdi
- Dışarıya açık (
- Bu WebView, HTTP isteklerinin
Authorizationbaşlığında erişim belirtecini taşıyordu - WebView hata ayıklaması açıktı;
chrome://inspectile davranış gözlemlenebiliyordu ve harici bir adrese yönlendirildiğinde GET isteğiyle birlikteAuthorizationbaşlığı açığa çıkıyordu - Saldırgan bu WebView içinde JavaScript çalıştırabilirse, kötü amaçlı bir
kakaotalk://buyderin bağlantısına tıklanmasıyla kullanıcının erişim belirtecini çalabiliyordu
URL doğrulamasını atlatma ve DOM XSS zinciri
CommerceBuyActivity, saldırgana ait rastgele bir URL'yi doğrudan yüklemiyor, girilen derin bağlantıyıhttps://buy.kakao.comile başlayan bir URL olarak birleştiriyordu- Örneğin
kakaotalk://buy/foo,https://buy.kakao.com/fooolarak yükleniyordu - Yol, sorgu parametreleri ve fragment saldırgan tarafından kontrol edilebiliyordu
- Örneğin
https://buy.kakao.com/auth/0/cleanFrontRedirect?returnUrl=uç noktası, rastgele birkakao.comalan adına yönlendirme yapabildiği içinkakao.comalt alanlarında XSS arama kapsamını genişletiyordum.shoppinghow.kakao.comüzerinde, arama sorgusunuinnerHTMLsink'ine aktaran bir uç nokta bulundu ve basit bir payload ile DOM XSS mümkün oldu- Daha önce var olan bir stored XSS de bulundu, ancak 2024 Mayıs itibarıyla düzeltilmiş göründüğü belirtildi
- Bu kombinasyon sayesinde kullanıcı kötü amaçlı derin bağlantıya tıkladığında
CommerceBuyActivityWebView içinde rastgele JavaScript çalışıyor veAuthorizationbaşlığındaki erişim belirteci dışarıya gönderilebiliyordu
Belirteç ile Kakao Mail ve hesap sıfırlamasına erişim
- Sızdırılan KakaoTalk erişim belirteci, kurbanın Kakao Mail hesabına erişmek için kullanılabiliyordu
- Kurbanın Kakao Mail kullanıp kullanmadığı doğrulandıktan sonra ayrı bir belirteç alınarak
talk.mail.kakao.comerişim akışı mümkün oluyordu - Kurbanın Kakao Mail hesabı olmasa bile onun adına yeni bir hesap oluşturulabiliyor, yeni e-posta adresi oluşturulurken
Set As Primary Emailseçilirse mevcut kayıtlı e-posta adresi ek doğrulama olmadan üzerine yazılabiliyordu - Kakao Mail erişiminden sonra bir sonraki adım KakaoTalk parola sıfırlamasıydı
- Gerekli ek bilgiler olan kurbanın e-posta adresi, takma adı ve telefon numarası aynı hesap ayarları API çağrısından elde edilebiliyordu
accounts.kakao.comüzerindeki parola sıfırlama sürecinde SMS 2FA vardı, ancak Burp ile istek ve yanıtlar yakalanıp değiştirilerek e-posta doğrulama akışına çevrilebiliyordu- Doğrulama kodu kurbanın Kakao Mail hesabından görülebiliyordu
PC istemcisi kaydı ve mesaj erişimi
- Kurbanın kimlik bilgileriyle Windows/macOS için KakaoTalk veya KiwiTalk'a giriş yapıldığında ikinci bir doğrulama faktörü gerekiyordu
- Bu doğrulama 4 haneli PIN yöntemiyle yapılıyordu; PIN ya PC sürümünde gösterilip mobil uygulamaya giriliyor ya da tersine mobil uygulamaya gönderilip PC uygulamasına giriliyordu
- PIN'i brute force ile denemek zordu ve ilgili uç noktada 5 denemeden sonra engelleme şeklinde oran sınırlaması vardı
- Ancak sızdırılan erişim belirteci ile KakaoTalk arka ucuna PIN gönderilebiliyor veya PIN sorgulanabiliyordu
- Bu süreç sayesinde saldırganın kontrolündeki cihaz kurbanın KakaoTalk hesabına kaydediliyor ve uçtan uca şifrelenmemiş sohbet mesajlarını okuyan PoC tamamlanıyordu
Açıklama, düzeltme ve araştırma kaynakları
- Zafiyet CVE-2023-51219 olarak tanımlandı
- Araştırmacı, diğer güvenlik araştırmacılarının KakaoTalk'un geniş saldırı yüzeyini analiz edebilmesi için araçlar yayımladı
- Zafiyet, 2023 Aralık ayında Kakao Bug Bounty Program aracılığıyla bildirildi
- Bildirimi yapan kişi, ödül kapsamının Kore vatandaşlarıyla sınırlı olması nedeniyle ödül alamadığını belirtti
- Kakao Corp. hemen
https://buy.kakao.comalanını kapattı,/auth/0/cleanFrontRedirect?returnUrl=yönlendirmesini kaldırdı ve sonraki sürümlerde zafiyetliCommerceBuyActivity'yi de çıkardı
1 yorum
Hacker News yorumları
Özellikle alan adının meşru gibi göründüğü bir zafiyetse, büyükannenizin şüpheli bir bağlantıyı fark etmesi zor olur; Kore’deki hiyerarşik iş kültürünün de bunda payı olduğunu düşünüyorum
Yönetici özellik teslim tarihini pazarlığa kapalı şekilde dayatıyor; güvenlik açıkları görünmüyor ama UI görünüyor, bu yüzden bir yerlerden kırpıp yayınlıyorlar
Sonuçta güvenlik deliği bol bir uygulama ortaya çıkıyor ve Kakao hissesi düşene kadar bunu düzgünce düzelteceklerini sanmıyorum
Güvenlik tarafında bunun Kore’nin iş kültüründen ziyade, Naver, Kakao, LINE, Coupang, Woowa Bros gibi “Nekarakubae” diye birlikte anılan büyük BT şirketlerinin ortalamanın çok üzerinde iş kültürü ve ücretlendirmeye sahip olmasından kaynaklandığını düşünüyorum
Muhtemelen yerel pazara yönelik bir uygulama olduğu için, dünya çapında popüler uygulamalar kadar yeterince sınanmamış olmasına daha yakın. Yine de deneyimime göre ücretler ABD’ye veya bazı Koreli girişimlere kıyasla daha düşüktü
Fark, Kore’de kamu sektörü ve chaebol’lerin BT pazarının büyük bölümünü oluşturması; bu yüzden girişim kültürünün fark yaratabileceği çok az alan kalıyor gibi görünüyor
Kakao da bir zamanlar havalı bir girişimdi ama başarılı olduktan sonra chaebol’leri taklit etmeye uğraşmış gibi geliyor
Kültür nedeniyle Kore’de daha kötü olabilir ama Batı’da da kesinlikle yaşanıyor; hatta neredeyse evrensel bir sorun
ABD’de belli büyüklükte herhangi bir beyaz yakalı şirkette, özellikle teknoloji, finans, danışmanlık veya FAANG’de birkaç yıl çalışsanız Batı’nın da aynı olduğunu anlarsınız
Orta seviye mühendisler bir sonraki terfi döngüsüne girmek için VP’nin suyuna gidiyor; şirketler “yatay organizasyon” pazarlamasını iyi yapıyor ama gerçekte bu daha çok PR metni
Bir PM ya da SVP talimat verdiğinde çoğu zaman kimse doğrudan sorgulamıyor, homurdanıp işi yapıyor; bu tür şirket kültürü pazarlamasına olduğu gibi inanmanın sığ bir üstünlük hissine dönüşmesi daha da üzücü
Yakın zamanda Seul’e yaptığım seyahatte o uygulamaya giriş yapmak için mobil sohbet uygulaması hesabı açmam gerekti; kullanıcı deneyimi de iyi değildi ve çoğu Korece olduğu için epey zorlandım
Çok profesyonel işletildiği izlenimini almadım
KakaoTalk ve Naver, Batı’daki WhatsApp/Meta ve Google’ın rolünü neredeyse üstlenmişti
Çok uluslu şirketlerle rekabet artmasına rağmen ayakta kalmaları bence etkileyici. Başka birçok ülkede yerel teknoloji şirketleri son 10 yılda neredeyse anlamsızlaştı ve bu üzücü
Bu yüzden yoldan taksi çevirmek de zordu; çoğu yalnızca uygulama üzerinden çağıran müşterileri alıyor gibiydi
Bir keresinde zar zor bir taksi şoförüyle iletişim kurdum ama “yabancı” olduğum için beni almayacağını söyledi; bunun gerçekten yabancı düşmanlığı mı, nakit ödemeden hoşlanmaması mı, Korece anlaşamamamız mı yoksa bir yanlış anlama mı olduğunu bilmiyorum
Sonradan binebildiğim takside de rota şehrin öbür tarafına, dağın üzerinden gidiyordu; çıktığım kişiyi arayıp şoföre yolun yanlış olduğunu anlatmasını istemem gerekti. Hazırlıksız şekilde yabancı bir ülkeye gitmenin risklerinden biri olduğunu düşünüyorum
2015’in başında ziyaret ettiğimde Google buna örnekti
Bir Kore uygulamasının hangi dilde olmasını bekliyordunuz, Fransızca mı?
Ancak bildiğim kadarıyla gerçek Uber’den çok, Uber arayüzünü kullanan bir KakaoTaxi proxy’si gibi
Ana sohbet uygulamasında hediye gönderme gibi bu zafiyeti mümkün kılan ek özellikler var ama taksi çağırma KakaoTalk’ta değil; kiralık scooter, elektrikli bisiklet, tren ve uçak rezervasyonu da sunan mobilite uygulaması Kakao T üzerinden yapılıyor
Ödeme platformu KakaoPay ile entegrasyon var ama hizmetin kendisi ayrı bir uygulamada; merkezi bir ID ile birden fazla hizmete erişilen Android’deki Google’a daha yakın
Bu yüzden uygulamada çok sayıda erişim noktası olmasının nedeni de muhtemelen kendi hizmetleriyle entegrasyon
WeChat’te olduğu gibi KakaoPay, KakaoTalk’a yeterince entegre; kullanıcıların büyük çoğunluğu KakaoPay’i KakaoPay uygulamasında değil, yalnızca KakaoTalk içinde kullanıyor
Ayrı bir KakaoPay uygulaması olması pek bir şeyi değiştirmiyor; KakaoPay uygulaması olmadan da KakaoTalk’ta para gönderebilir, alabilir ve ödeme yapabilirsiniz
Meğer o istemci, mesajları yanlış kullanıcıya gösteren bug’larla doluymuş
Mobil sohbet uygulamaları “hızlı hareket et ve bir şeyleri boz” anlayışıyla geliştirilmemeli; Kakao gibi hepsi bir arada uygulamaların doğal sonucu da bence bu
Öyle değilse bu, istemci bug’ından çok sunucu bug’ına daha yakın görünüyor
Ayrıca Telegram şimdiye kadar kullandığım sohbet uygulamaları arasında en kararlı, en özellikli ve kullanımı en kolay olanlardan biriydi
“Yurt içinde veya yurt dışında yaşayan Koreli” olmak gerektiği yazıyor
https://bugbounty.kakao.com/home
Para alabileceğini bekleyerek gönderip sonradan bunun Kore vatandaşlarıyla sınırlı olduğunu öğrenseydi daha kötü olurdu
Ayrıca ödüller de çok düşük: en az 50.000 won, yaklaşık 35 dolardan başlayıp en fazla 10 milyon won, yaklaşık 7.100 dolar seviyesinde
Bir yabancı olarak son 9 yıldır Seul’de girişim kurarken benzer şeyleri defalarca yaşadım
Uzun vadeli bir oyun için mi, yoksa az sayıda kişiye giden kısa vadeli kârlar için mi olduklarını sorgulamalıyız
Gerçek ortamda istismar edildiğine dair bilinen bir şey var mı?