4 điểm bởi GN⁺ 2024-06-27 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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 CommerceBuyActivity của KakaoTalk 10.4.3, nơi việc xác thực deeplink không đầy đủ, JavaScript được bật và header Authorization bị lộ cùng tạo ra vấn đề
  • Chuỗi tấn công sử dụng redirect của buy.kakao.comDOM XSS trên m.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.com và loại bỏ redirect liên quan cùng CommerceBuyActivity dễ 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 CommerceBuyActivity có 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ì Component hoặc Selector của URI intent:// không được làm sạch về null
  • WebView này gửi access token trong header Authorization củ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, header Authorization bị 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

  • CommerceBuyActivity khô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ằng https://buy.kakao.com
    • Ví dụ, kakaotalk://buy/foo sẽ tải https://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
  • Endpoint https://buy.kakao.com/auth/0/cleanFrontRedirect?returnUrl= có thể redirect tới bất kỳ domain kakao.com nào, mở rộng phạm vi tấn công sang việc tìm XSS trên các subdomain của kakao.com
  • Trên m.shoppinghow.kakao.com, đã phát hiện một endpoint đưa truy vấn tìm kiếm vào sink innerHTML, 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 header Authorization có 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 Email thì đị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.com có 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óa CommerceBuyActivity dễ bị tấn công

1 bình luận

 
GN⁺ 2024-06-27
Các ý kiến trên Hacker News
  • Nếu sống ở Hàn Quốc thì rất khó không dùng Kakao, và vì đây là ứng dụng được dùng đến cả thế hệ bà, nên việc nó có nhiều lỗ hổng bảo mật là điều đáng lo
    Đặ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
    • Tôi là người Hàn nhưng không dùng KakaoTalk, LINE hay Facebook. Đúng là hơi khác thường, nhưng nhiều dịch vụ có cung cấp phương án thay thế bằng SMS, nên vẫn sống được nếu không có chúng
      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
    • Deadline bất khả thi và văn hóa làm việc theo cấp bậc không chỉ có ở Hàn Quốc mà tồn tại trên toàn thế giới
      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
    • Hiện tượng sếp hoặc khách hàng nhìn thấy UI nhưng không thấy vấn đề bảo mật không phải chỉ riêng Hàn Quốc
      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
    • Tôi tò mò liệu vấn đề này có đủ để lọt vào tin tức Hàn Quốc hoặc cơ quan quản lý hay không. Ngoài giá cổ phiếu, có thể còn có con đường quy trách nhiệm khác
    • Văn hóa làm việc theo cấp bậc thường được người Mỹ dùng như một cái cớ vạn năng để giải thích những gì họ không thích ở Đông Á
      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
  • Điều thú vị là các ứng dụng gọi xe của phương Tây không mấy thành công ở Hàn Quốc, và công ty này cũng làm ra ứng dụng gọi xe tiêu biểu của Hàn Quốc
    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
    • Khi sống ở Hàn Quốc vài năm trước, tôi thấy thú vị ở chỗ hệ sinh thái ứng dụng và dịch vụ được hình thành khá riêng biệt
      KakaoTalkNaver 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
    • Khi tôi đến đó khoảng 5 năm trước, vì không có tài khoản ngân hàng Hàn Quốc nên tôi hoàn toàn không dùng được ứng dụng taxi
      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 đủ
    • Điều khiến tôi ngạc nhiên ở Hàn Quốc là có rất nhiều phương án địa phương cho các sản phẩm công nghệ mà tôi tưởng được dùng trên toàn cầu, còn phiên bản toàn cầu/Mỹ thì gần như không thâm nhập thị trường
      Khi tôi đến vào đầu năm 2015, Google là một ví dụ như vậy
    • Tôi không hiểu sự thật hiển nhiên rằng ứng dụng Hàn Quốc “phần lớn” bằng tiếng Hàn thì liên quan gì đến trải nghiệm người dùng hay việc thiếu chuyên nghiệp
      Bạn kỳ vọng ứng dụng Hàn Quốc dùng ngôn ngữ gì, tiếng Pháp à?
    • Như những người khác đã nói, Uber hoạt động ở Hàn Quốc, ít nhất là ở Seoul
      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
  • Cần đính chính nhỏ. KakaoTalk không phải ứng dụng “tất cả trong một” như WeChat
    Ứ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ọ
    • Điều này không chính xác
      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
  • Việc chỉ người Hàn Quốc mới đủ điều kiện nhận thưởng khiến tôi nghĩ đến mức này thì họ bị hacker tấn công cũng đáng
    • Ngay cả với người Hàn Quốc, mức thưởng tối đa khoảng 7.000 USD cũng quá thấp đối với một ứng dụng có vẻ có nhiều vấn đề bảo mật
    • Cấu trúc như vậy khuyến khích người ta bán lỗi ra ngoài
  • Tôi nhớ chuyện nhà sáng lập Telegram từng khoe tài năng của đội ngũ khi nói rằng client di động do một lập trình viên phụ trách
    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
    • Tôi thắc mắc có phải ý là trên ứng dụng di động có thêm nhiều tài khoản người dùng, và tin nhắn của một tài khoản lại bị hiển thị ở tài khoản khác hay không
      Nếu không phải vậy, thì trông nó giống lỗi server hơn là lỗi client
    • Ứng dụng chat rất khó, và các ứng dụng cạnh tranh cũng từng có nhiều lỗi tương tự, nên chỉ dựa vào điều này tôi không thấy đó là bằng chứng về chất lượng kém
      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
    • Để bênh Telegram thì các chuyện tương tự cũng xảy ra rất nhiều ở các dịch vụ lớn như Facebook, Google, Apple
    • Phần mềm được thiết kế theo kiểu thiết kế bởi ủy ban cũng có thể có những lỗi khủng khiếp
    • Kakao chắc chắn không di chuyển nhanh
  • Thật sốc khi họ đã báo cáo lỗ hổng vào tháng 12/2023 qua Bug Bounty Program của Kakao, nhưng không nhận được gì vì chỉ người Hàn Quốc mới có thể nhận thưởng
    • Ít nhất hạn chế này cũng được công khai trên trang bug bounty
      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
    • Ở Hàn Quốc chuyện như vậy khá phổ biến
      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
  • Chúng ta cần lùi lại một bước và suy nghĩ lại về phương pháp công nghệ phần mềm ngày nay
    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
  • Tôi tò mò không biết nhân sự quân đội Mỹ đồn trú tại Hàn Quốc bị ảnh hưởng bởi lỗ hổng này đến mức nào
    Có thông tin nào cho thấy nó đã bị khai thác ngoài thực tế chưa?
  • Dịch vụ đã hơn 10 năm mà vẫn chưa có phiên bản web, nhưng nhìn tin này thì có lẽ lại là điều may
    • Dù vậy tôi vẫn muốn có phiên bản web. Vì rất khó chạy ổn định app Kakao trên Linux bằng wine