कोरिया के सबसे बड़े मोबाइल चैट ऐप में मिला 1-क्लिक exploit
(stulle123.github.io)- KakaoTalk Android ऐप में deeplink, WebView और XSS के मेल से, यूज़र के सिर्फ एक बार malicious link दबाने भर से access token leak और account takeover तक हो सकता था
- मुख्य entry point KakaoTalk
10.4.3काCommerceBuyActivityWebView था, और deeplink validation की कमी, JavaScript enabled होना, औरAuthorizationheader exposure ने मिलकर समस्या पैदा की - attack chain
buy.kakao.comredirect औरm.shoppinghow.kakao.comके DOM XSS का इस्तेमाल करके WebView के अंदर arbitrary JavaScript execute करने की विधि थी - लीक हुए token का उपयोग Kakao Mail access, password reset, और PC/Mac के लिए KakaoTalk या KiwiTalk client registration में किया जा सकता था
- vulnerability को CVE-2023-51219 के रूप में assign किया गया, और report के बाद Kakao Corp. ने
buy.kakao.comको बंद किया और संबंधित redirect व vulnerableCommerceBuyActivityको हटा दिया
vulnerability का scope और prerequisites
- KakaoTalk Google Playstore पर 100 मिलियन से ज्यादा downloads वाला कोरिया का प्रमुख chat app है, और payments, ride-hailing, shopping, email आदि शामिल करने वाला all-in-one app जैसा है
- सामान्य chat rooms में end-to-end encryption (E2EE) default रूप से on नहीं है, इसलिए Kakao Corp. के लिए transit में messages access कर पाने वाली संरचना है
- वैकल्पिक E2EE feature Secure Chat मौजूद है, लेकिन group messaging या voice calls support नहीं करता
- PoC का लक्ष्य victim account में KakaoTalk for Windows/macOS या open-source client KiwiTalk register करके non-end-to-end encrypted chat messages पढ़ना था
entry point: CommerceBuyActivity WebView
CommerceBuyActivityWebView में attacker के लिए अनुकूल कई conditions थीं- यह externally exposed (exported) था और
kakaotalk://buyजैसे deeplink से start किया जा सकता था settings.setJavaScriptEnabled(true)से JavaScript enabled था- JavaScript से
intent://scheme के जरिए externally exposed न होने वाले app components को भी data भेजा जा सकता था intent://URI केComponentयाSelectorकोnullमें sanitize नहीं किया जाता था, इसलिए URI handling भी अपर्याप्त थी
- यह externally exposed (exported) था और
- यह WebView HTTP requests के
Authorizationheader में access token भेजता था - WebView debugging on थी, जिससे
chrome://inspectसे behavior verify किया जा सकता था, और external address पर navigate कराने पर GET request के साथAuthorizationheader expose हो जाता था - अगर attacker इस WebView के अंदर JavaScript execute कर ले, तो malicious
kakaotalk://buydeeplink पर click मात्र से यूज़र का access token चोरी किया जा सकता था
URL validation bypass और DOM XSS chaining
CommerceBuyActivityarbitrary attacker URL सीधे load नहीं करता था, बल्कि input deeplink कोhttps://buy.kakao.comसे शुरू होने वाले URL में compose करता था- उदाहरण के लिए
kakaotalk://buy/fooकोhttps://buy.kakao.com/fooके रूप में load किया जाता था - path, query parameters और fragment attacker control कर सकता था
- उदाहरण के लिए
https://buy.kakao.com/auth/0/cleanFrontRedirect?returnUrl=endpoint arbitrarykakao.comdomain पर redirect कर सकता था, जिससेkakao.comsubdomains में XSS खोजने का attack scope बढ़ गयाm.shoppinghow.kakao.comमें ऐसा endpoint मिला जहां search queryinnerHTMLsink तक पहुंचती थी, और simple payload से DOM XSS संभव था- पहले मौजूद stored XSS भी मिला था, लेकिन बताया गया कि मई 2024 तक वह fix हो चुका लगता है
- इस combination से, user के malicious deeplink click करने पर
CommerceBuyActivityWebView के अंदर arbitrary JavaScript execute होती औरAuthorizationheader का access token बाहर भेजा जा सकता था
token से Kakao Mail और account reset तक access
- leak हुआ KakaoTalk access token victim के Kakao Mail account access के लिए इस्तेमाल किया जा सकता था
- victim Kakao Mail इस्तेमाल कर रहा है या नहीं, यह check करने के बाद अलग token लेकर
talk.mail.kakao.comaccess करने का flow संभव था - अगर victim के पास Kakao Mail account नहीं था, तब भी victim के नाम पर नया account बनाया जा सकता था, और नया email address बनाते समय
Set As Primary Emailचुनने पर मौजूदा registered email address बिना अतिरिक्त verification के overwrite हो सकता था - Kakao Mail access के बाद अगला step KakaoTalk password reset था
- अतिरिक्त रूप से जरूरी victim का email address, nickname और phone number उसी account settings API call से मिल सकता था
accounts.kakao.comके password reset process में SMS 2FA था, लेकिन Burp से requests और responses intercept व modify करके इसे email verification flow में बदला जा सकता था- verification code victim के Kakao Mail में देखा जा सकता था
PC client registration और message access
- victim के credentials से KakaoTalk for Windows/macOS या KiwiTalk में login करने पर second authentication factor की जरूरत थी
- यह authentication 4-digit PIN method था, जिसमें PIN PC version पर दिखता और mobile app में enter किया जाता, या इसके उलट mobile app पर भेजा जाता और PC app में enter किया जाता था
- PIN को brute-force करना कठिन था, और संबंधित endpoints पर 5 attempts के बाद block होने वाली rate limit थी
- लेकिन leaked access token से KakaoTalk backend में PIN submit या retrieve किया जा सकता था
- इस process के जरिए attacker-controlled device को victim के KakaoTalk account में register करके, non-end-to-end encrypted chat messages पढ़ने वाला PoC पूरा हुआ
disclosure, fixes और research material
- vulnerability को CVE-2023-51219 के रूप में assign किया गया
- researcher ने अन्य security researchers को KakaoTalk के बड़े attack surface का analysis करने में मदद के लिए tools public किए
- vulnerability को दिसंबर 2023 में Kakao Bug Bounty Program के जरिए report किया गया
- reporter ने बताया कि reward eligibility को Korean nationals तक सीमित रखा गया था, इसलिए उन्हें reward नहीं मिला
- Kakao Corp. ने तुरंत
https://buy.kakao.comको बंद किया और/auth/0/cleanFrontRedirect?returnUrl=redirect हटाया, और बाद के version में vulnerableCommerceBuyActivityभी हटा दिया
1 टिप्पणियां
Hacker News की राय
खासकर अगर vulnerability ऐसी हो जिसमें domain सामान्य जैसा दिखे, तो दादी-नानी के लिए संदिग्ध link पहचानना मुश्किल होगा, और मुझे लगता है Korea की hierarchical work culture भी इसमें भूमिका निभाती है
boss feature deadline को non-negotiable बनाकर दे देता है, security vulnerabilities दिखती नहीं हैं लेकिन UI दिखता है, इसलिए कुछ हिस्से काट-छांट कर release कर दिया जाता है
आखिर में ऐप security holes से भरा बन जाता है, और Kakao stock price गिरने तक शायद इसे ठीक से नहीं सुधारा जाएगा
security के मामले में मुझे नहीं लगता कि यह Korea की work culture की वजह से है; बल्कि Naver, Kakao, LINE, Coupang, Woowa Bros जैसी प्रमुख IT companies, जिन्हें Nekarakuba कहा जाता है, आमतौर पर average से काफी बेहतर work culture और compensation रखती हैं
शायद यह domestic ऐप है, इसलिए global स्तर पर लोकप्रिय apps जितनी पर्याप्त scrutiny नहीं मिली। हालांकि मेरे अनुभव में compensation US या कुछ Korean startups से कम था
फर्क यह लगता है कि Korea में government sector और chaebol IT market का बड़ा हिस्सा घेरे हुए हैं, इसलिए startup culture के पास फर्क पैदा करने की ज्यादा जगह नहीं है
Kakao भी कभी cool startup था, लेकिन सफल होने के बाद से ऐसा लगता है कि वह chaebol की नकल करने की कोशिश करता रहा है
culture की वजह से Korea में यह ज्यादा हो सकता है, लेकिन Western countries में भी यह निश्चित रूप से होता है और असल में लगभग universal problem है
America में किसी भी ठीक-ठाक size की white-collar company, खासकर tech, finance, consulting या FAANG में कुछ साल बिताइए, तो समझ आ जाएगा कि West भी वैसा ही है
mid-level engineers अगले promotion cycle में आने के लिए VP की हां में हां मिलाते हैं, और companies “flat organization” की marketing अच्छी करती हैं, लेकिन असल में वह PR copy के करीब होती है
PM या SVP instruction दे तो अक्सर कोई सीधे सवाल नहीं करता, बस बड़बड़ाते हुए काम कर देता है; और ऐसी company culture marketing पर सीधे विश्वास कर लेने वाला रवैया जिस तरह हल्की superior feeling तक जाता है, वह और भी खलता है
हाल की Seoul trip में उस app में login करने के लिए मुझे mobile chat app account बनाना पड़ा, user experience भी अच्छा नहीं था और ज्यादातर Korean में था, इसलिए काफी दिक्कत हुई
इससे बहुत professional operation का impression नहीं मिला
KakaoTalk और Naver लगभग वही भूमिका निभा रहे थे जो West में WhatsApp/Meta और Google निभाते हैं
multinational companies से competition बढ़ने के बावजूद उनका बचना शानदार लगता है। कई दूसरे देशों में पिछले 10 साल में local tech companies लगभग महत्वहीन हो गईं, और यह अफसोस की बात है
इसलिए सड़क से taxi पकड़ना भी मुश्किल था, और लग रहा था कि ज्यादातर taxis सिर्फ app से बुलाए गए customers को ही ले रही थीं
एक बार किसी तरह taxi driver से संपर्क हुआ, लेकिन उसने “foreigner” होने के कारण बैठाने से मना कर दिया; पता नहीं वह सच में prejudice था, cash payment पसंद नहीं था, Korean language न समझ पाने की वजह थी या कोई misunderstanding
बाद में जो taxi ride सफल हुई, उसमें भी route city के दूसरी तरफ पहाड़ पार करके जा रहा था, इसलिए जिस व्यक्ति के साथ date पर गया था उसे phone करके driver को समझाने के लिए कहना पड़ा कि रास्ता गलत है। मुझे लगता है यह बिना तैयारी किसी अनजान देश जाने का risk है
2015 की शुरुआत में visit करते समय Google ऐसा ही example था
आप Korean app किस भाषा में होने की उम्मीद कर रहे थे, French में?
हालांकि मेरी समझ में वह असली Uber से ज्यादा Uber interface इस्तेमाल करने वाला KakaoTaxi proxy है
main chat app में gifting जैसे add-on features हैं, जिनसे यह vulnerability संभव हुई, लेकिन taxi hailing KakaoTalk में नहीं बल्कि mobility app Kakao T में होती है, जो rental scooters, e-bikes, train और flight booking भी देती है
payment platform KakaoPay से integration है, लेकिन service खुद अलग app में है, और यह central ID से multiple services access करने वाले Android के Google जैसा ज्यादा है
इसलिए app में कई access points होने की वजह भी शायद अपनी services के integrations ही होंगे
WeChat की तरह KakaoPay KakaoTalk में काफी integrated है, इसलिए ज्यादातर users KakaoPay app नहीं, बल्कि KakaoTalk के अंदर ही KakaoPay इस्तेमाल करते हैं
अलग KakaoPay app मौजूद है, इससे ज्यादा फर्क नहीं पड़ता, और KakaoPay app के बिना भी KakaoTalk में money transfer, receive और payments किए जा सकते हैं
बाद में पता चला कि उस client में गलत user को messages दिखाने वाले bugs भरे पड़े थे
mobile chat apps को “move fast and break things” तरीके से develop नहीं करना चाहिए, और Kakao जैसी all-in-one app का natural result शायद यही है
अगर ऐसा नहीं है, तो यह client bug से ज्यादा server bug जैसा लगता है
और Telegram अब तक इस्तेमाल की गई chat apps में सबसे stable, feature-rich और easy-to-use में से रहा है
लिखा है कि “देश-विदेश में रहने वाले Korean nationals” होना चाहिए
https://bugbounty.kakao.com/home
अगर किसी ने पैसे मिलने की उम्मीद से submit किया और बाद में पता चला कि यह Korean citizens तक सीमित है, तो यह और भी बुरा होता
साथ ही reward भी बहुत कम है: minimum 50,000 won, यानी करीब 35 dollars से maximum 10 million won, यानी लगभग 7,100 dollars तक
foreigner के तौर पर पिछले 9 साल Seoul में startup बनाते हुए मैंने ऐसी चीजें कई बार झेली हैं
देखना चाहिए कि वे long game के लिए हैं या कुछ लोगों को मिलने वाले short-term gains के लिए
क्या real-world में इसके exploit होने के बारे में कुछ known है?