Phát hiện exploit 1-click trong ứng dụng chat di động lớn nhất Hàn Quốc
(stulle123.github.io)- Trong ứng dụng KakaoTalk Android, sự kết hợp giữa deeplink, WebView và XSS khiến chỉ cần người dùng nhấn vào một liên kết độc hại một lần là có thể dẫn tới rò rỉ access token và chiếm quyền tài khoản
- Điểm vào chính là WebView
CommerceBuyActivitycủa KakaoTalk10.4.3, nơi việc xác thực deeplink không đầy đủ, JavaScript được bật và headerAuthorizationbị lộ cùng tạo ra vấn đề - Chuỗi tấn công sử dụng redirect của
buy.kakao.comvà DOM XSS trênm.shoppinghow.kakao.comđể thực thi JavaScript tùy ý bên trong WebView - Token bị lộ có thể được dùng để truy cập Kakao Mail, đặt lại mật khẩu, và đăng ký client KakaoTalk cho PC/Mac hoặc KiwiTalk
- Lỗ hổng được gán mã CVE-2023-51219; sau khi được báo cáo, Kakao Corp. đã gỡ
buy.kakao.comvà loại bỏ redirect liên quan cùngCommerceBuyActivitydễ bị tấn công
Phạm vi và giả định của lỗ hổng
- KakaoTalk là ứng dụng chat tiêu biểu của Hàn Quốc với hơn 100 triệu lượt tải trên Google Playstore, đồng thời mang tính chất ứng dụng all-in-one bao gồm thanh toán, gọi xe, mua sắm, email và nhiều dịch vụ khác
- Các phòng chat thông thường không bật mã hóa đầu-cuối (E2EE) theo mặc định, nên Kakao Corp. có cấu trúc cho phép truy cập tin nhắn trong quá trình truyền tải
- Dù có tính năng E2EE tùy chọn là Secure Chat, nó không hỗ trợ nhắn tin nhóm hoặc gọi thoại
- Mục tiêu của PoC là đăng ký KakaoTalk for Windows/macOS hoặc client mã nguồn mở KiwiTalk vào tài khoản nạn nhân để đọc tin nhắn chat không được mã hóa đầu-cuối
Điểm vào: WebView của CommerceBuyActivity
- WebView
CommerceBuyActivitycó nhiều điều kiện thuận lợi cho kẻ tấn công- Nó được export ra bên ngoài và có thể khởi chạy bằng deeplink như
kakaotalk://buy - JavaScript được bật bằng
settings.setJavaScriptEnabled(true) - Từ JavaScript, có thể gửi dữ liệu tới cả các thành phần ứng dụng không bị lộ ra ngoài thông qua schema
intent:// - Việc xử lý URI cũng thiếu sót vì
ComponenthoặcSelectorcủa URIintent://không được làm sạch vềnull
- Nó được export ra bên ngoài và có thể khởi chạy bằng deeplink như
- WebView này gửi access token trong header
Authorizationcủa các yêu cầu HTTP - Việc debug WebView được bật nên có thể kiểm tra hoạt động qua
chrome://inspect; khi điều hướng tới địa chỉ bên ngoài, headerAuthorizationbị lộ cùng với yêu cầu GET - Nếu kẻ tấn công thực thi được JavaScript trong WebView này, chỉ cần nhấn vào deeplink
kakaotalk://buyđộc hại là có thể đánh cắp access token của người dùng
Vượt qua kiểm tra URL và nối với DOM XSS
CommerceBuyActivitykhông tải trực tiếp URL tùy ý của kẻ tấn công mà ghép deeplink đầu vào thành URL bắt đầu bằnghttps://buy.kakao.com- Ví dụ,
kakaotalk://buy/foosẽ tảihttps://buy.kakao.com/foo - Kẻ tấn công có thể kiểm soát đường dẫn, tham số truy vấn và fragment
- Ví dụ,
- Endpoint
https://buy.kakao.com/auth/0/cleanFrontRedirect?returnUrl=có thể redirect tới bất kỳ domainkakao.comnào, mở rộng phạm vi tấn công sang việc tìm XSS trên các subdomain củakakao.com - Trên
m.shoppinghow.kakao.com, đã phát hiện một endpoint đưa truy vấn tìm kiếm vào sinkinnerHTML, cho phép DOM XSS với payload đơn giản - Một lỗ hổng stored XSS từng tồn tại trước đó cũng được phát hiện, nhưng bài viết nêu rõ rằng tính đến tháng 5/2024 có vẻ đã được vá
- Với tổ hợp này, khi người dùng nhấn vào deeplink độc hại, JavaScript tùy ý sẽ chạy bên trong WebView
CommerceBuyActivity, và access token trong headerAuthorizationcó thể bị gửi ra ngoài
Dùng token để truy cập Kakao Mail và đặt lại tài khoản
- Access token KakaoTalk bị lộ có thể được dùng để truy cập tài khoản Kakao Mail của nạn nhân
- Sau khi xác nhận nạn nhân có dùng Kakao Mail hay không, có thể lấy token riêng và truy cập
talk.mail.kakao.com - Ngay cả khi nạn nhân chưa có tài khoản Kakao Mail, vẫn có thể tạo tài khoản mới dưới danh nghĩa của họ; khi tạo địa chỉ email mới, nếu chọn
Set As Primary Emailthì địa chỉ email đã đăng ký trước đó có thể bị ghi đè mà không cần xác minh bổ sung - Sau khi truy cập được Kakao Mail, bước tiếp theo là đặt lại mật khẩu KakaoTalk
- Các thông tin bổ sung cần thiết như địa chỉ email, nickname và số điện thoại của nạn nhân có thể lấy từ cùng một lời gọi API cài đặt tài khoản
- Quy trình đặt lại mật khẩu của
accounts.kakao.comcó SMS 2FA, nhưng có thể chặn và chỉnh sửa request/response bằng Burp để chuyển sang luồng xác minh qua email - Mã xác minh có thể xem trong Kakao Mail của nạn nhân
Đăng ký client PC và truy cập tin nhắn
- Khi đăng nhập vào KakaoTalk for Windows/macOS hoặc KiwiTalk bằng thông tin xác thực của nạn nhân, vẫn cần yếu tố xác thực thứ hai
- Cơ chế này dùng PIN 4 chữ số; PIN hoặc được hiển thị trên bản PC để nhập vào ứng dụng di động, hoặc được gửi tới ứng dụng di động để nhập vào ứng dụng PC
- PIN khó brute-force và endpoint liên quan có giới hạn tốc độ chặn sau 5 lần thử
- Tuy nhiên, với access token bị lộ, có thể gửi hoặc truy vấn PIN với backend của KakaoTalk
- Qua quy trình này, PoC đã hoàn tất việc đăng ký thiết bị do kẻ tấn công kiểm soát vào tài khoản KakaoTalk của nạn nhân và đọc các tin nhắn chat không được mã hóa đầu-cuối
Công bố, khắc phục và tài liệu nghiên cứu
- Lỗ hổng được gán mã CVE-2023-51219
- Nhà nghiên cứu đã công bố công cụ để các nhà nghiên cứu bảo mật khác có thể phân tích bề mặt tấn công rộng của KakaoTalk
- Lỗ hổng được báo cáo vào tháng 12/2023 thông qua Kakao Bug Bounty Program
- Người báo cáo cho biết không nhận được tiền thưởng vì đối tượng đủ điều kiện chỉ giới hạn ở công dân Hàn Quốc
- Kakao Corp. đã ngay lập tức gỡ
https://buy.kakao.com, loại bỏ redirect/auth/0/cleanFrontRedirect?returnUrl=, và ở các phiên bản sau cũng xóaCommerceBuyActivitydễ bị tấn công
1 bình luận
Các ý kiến trên Hacker News
Đặc biệt nếu đó là lỗ hổng khiến tên miền trông có vẻ hợp lệ, bà của bạn sẽ khó nhận ra liên kết đáng ngờ; tôi nghĩ văn hóa làm việc theo cấp bậc ở Hàn Quốc cũng góp một phần
Cấp trên đưa ra hạn chót tính năng không thể thương lượng, lỗ hổng bảo mật thì không nhìn thấy được còn UI thì nhìn thấy, nên người ta cắt xén cho xong rồi phát hành
Kết quả là thành một ứng dụng đầy lỗ hổng bảo mật, và có lẽ họ sẽ không sửa nghiêm túc cho đến khi giá cổ phiếu Kakao giảm
Về bảo mật, tôi nghĩ không hẳn do văn hóa làm việc của Hàn Quốc, vì các công ty IT lớn thường được gộp dưới tên Naver, Kakao, LINE, Coupang, Woowa Bros vốn có văn hóa làm việc và đãi ngộ tốt hơn nhiều so với mặt bằng chung
Có lẽ đúng hơn là vì đây là ứng dụng dùng trong nước, nên chưa được kiểm chứng đầy đủ như các ứng dụng phổ biến toàn cầu. Tuy vậy, theo kinh nghiệm của tôi, đãi ngộ vẫn thấp hơn ở Mỹ hoặc một số startup Hàn Quốc
Khác biệt có vẻ nằm ở chỗ tại Hàn Quốc, khu vực chính phủ và chaebol chiếm tỷ trọng lớn trong thị trường IT, nên văn hóa startup không có nhiều không gian để tạo khác biệt
Kakao cũng từng là một startup rất ngầu, nhưng sau khi thành công thì có cảm giác họ đã cố bắt chước chaebol
Văn hóa có thể khiến nó nghiêm trọng hơn ở Hàn Quốc, nhưng điều này chắc chắn cũng xảy ra ở phương Tây và thực ra gần như là một vấn đề phổ quát
Chỉ cần làm vài năm ở một công ty văn phòng có quy mô nhất định ở Mỹ, đặc biệt là công nghệ, tài chính, tư vấn hoặc FAANG, là sẽ thấy phương Tây cũng y như vậy
Các kỹ sư cấp trung phụ họa với VP để lọt vào chu kỳ thăng chức tiếp theo, còn các công ty chỉ giỏi tiếp thị “tổ chức phẳng”, thực tế phần lớn chỉ là khẩu hiệu PR
Khi PM hoặc SVP ra chỉ thị, thường chẳng ai hỏi thẳng mà chỉ càu nhàu rồi làm theo; điều còn chua chát hơn là thái độ tin nguyên xi vào kiểu marketing văn hóa công ty này lại dẫn đến cảm giác ưu việt khá nông cạn
Trong chuyến đi Seoul gần đây, tôi phải tạo tài khoản ứng dụng chat di động để đăng nhập vào ứng dụng đó; trải nghiệm người dùng cũng không tốt, và vì phần lớn bằng tiếng Hàn nên tôi khá chật vật
Tôi không có ấn tượng rằng nó được vận hành chuyên nghiệp cho lắm
KakaoTalk và Naver gần như đảm nhiệm vai trò của WhatsApp/Meta và Google ở phương Tây
Tôi thấy việc họ vẫn sống sót dù cạnh tranh với các tập đoàn đa quốc gia ngày càng lớn là điều đáng nể. Ở nhiều quốc gia khác, các công ty công nghệ địa phương gần như đã trở nên không còn ý nghĩa trong 10 năm qua, và đó là điều đáng tiếc
Vì vậy bắt taxi ngoài đường cũng khó, và hầu hết xe dường như chỉ chở khách gọi qua ứng dụng
Có lần tôi khó khăn lắm mới tiếp cận được một tài xế taxi, nhưng ông ấy nói không chở vì tôi là “người nước ngoài”; tôi không biết đó là kỳ thị thật, không thích nhận tiền mặt, do không giao tiếp được bằng tiếng Hàn, hay là hiểu lầm
Lần sau bắt taxi thành công thì tuyến đường lại vượt núi sang phía bên kia thành phố, khiến tôi phải gọi cho người mình hẹn hò nhờ giải thích với tài xế rằng đi sai đường. Tôi xem đó là rủi ro khi đến một đất nước xa lạ mà chuẩn bị chưa đủ
Khi tôi đến vào đầu năm 2015, Google là một ví dụ như vậy
Bạn kỳ vọng ứng dụng Hàn Quốc dùng ngôn ngữ gì, tiếng Pháp à?
Tuy nhiên theo tôi biết thì nó không hẳn là Uber thật, mà giống một proxy KakaoTaxi dùng giao diện Uber hơn
Ứng dụng chat chính có các tính năng bổ sung như tặng quà, vốn đã tạo điều kiện cho lỗ hổng lần này, nhưng gọi taxi thì không nằm trong KakaoTalk mà trong ứng dụng di động Kakao T, ứng dụng này cũng cung cấp thuê scooter, xe đạp điện, đặt tàu hỏa và vé máy bay
Có liên kết với nền tảng thanh toán KakaoPay, nhưng bản thân dịch vụ nằm trong ứng dụng riêng; nó giống Google trên Android hơn, tức là dùng một ID trung tâm để truy cập nhiều dịch vụ
Vì vậy tôi nghĩ lý do ứng dụng có nhiều điểm tiếp cận cũng là do tích hợp với các dịch vụ của chính họ
Giống WeChat, KakaoPay đã được tích hợp đủ sâu vào KakaoTalk, nên đa số người dùng dùng KakaoPay ngay trong KakaoTalk chứ không dùng ứng dụng KakaoPay
Việc có một ứng dụng KakaoPay riêng không ảnh hưởng nhiều; ngay cả khi không có app KakaoPay, bạn vẫn có thể chuyển tiền, nhận tiền và thanh toán trong KakaoTalk
Hóa ra client đó đầy lỗi hiển thị tin nhắn cho sai người dùng
Ứng dụng chat di động không nên được phát triển theo kiểu “di chuyển nhanh và phá vỡ mọi thứ”, và tôi nghĩ đây là kết quả tự nhiên của một ứng dụng tất cả trong một như Kakao
Nếu không phải vậy, thì trông nó giống lỗi server hơn là lỗi client
Và Telegram là một trong những ứng dụng chat ổn định nhất, nhiều tính năng nhất và dễ dùng nhất mà tôi từng dùng
Trang đó ghi phải là “người Hàn Quốc cư trú trong hoặc ngoài nước”
https://bugbounty.kakao.com/home
Sẽ còn tệ hơn nếu ai đó nộp với kỳ vọng được nhận tiền rồi sau đó mới biết chương trình giới hạn cho công dân Hàn Quốc
Nói thêm là tiền thưởng cũng rất thấp, từ tối thiểu 50.000 won, khoảng 35 USD, đến tối đa 10 triệu won, khoảng 7.100 USD
Là người nước ngoài xây dựng startup ở Seoul trong 9 năm qua, tôi đã gặp những chuyện tương tự nhiều lần
Cần xem nó phục vụ cuộc chơi dài hạn, hay lợi ích ngắn hạn dành cho một số ít người
Có thông tin nào cho thấy nó đã bị khai thác ngoài thực tế chưa?