4 poin oleh GN⁺ 2024-06-27 | 1 komentar | Bagikan ke WhatsApp
  • Di aplikasi KakaoTalk Android, kombinasi deep link, WebView, dan XSS dapat membuat token akses bocor hingga berujung pada pengambilalihan akun hanya dengan satu kali klik pada tautan berbahaya
  • Titik masuk utamanya adalah WebView CommerceBuyActivity di KakaoTalk 10.4.3, dan masalah muncul dari gabungan kurangnya validasi deep link, JavaScript yang diaktifkan, serta bocornya header Authorization
  • Rantai serangan memanfaatkan redirect buy.kakao.com dan DOM XSS di m.shoppinghow.kakao.com untuk menjalankan JavaScript arbitrer di dalam WebView
  • Token yang bocor dapat digunakan untuk mengakses Kakao Mail, mereset kata sandi, dan mendaftarkan klien KakaoTalk untuk PC/Mac atau KiwiTalk
  • Kerentanan ini diberi kode CVE-2023-51219; setelah laporan masuk, Kakao Corp. menonaktifkan buy.kakao.com dan menghapus redirect terkait serta CommerceBuyActivity yang rentan

Cakupan dan prasyarat kerentanan

  • KakaoTalk adalah aplikasi chat utama di Korea dengan lebih dari 100 juta unduhan di Google Play Store, dan bersifat aplikasi all-in-one yang mencakup pembayaran, pemesanan kendaraan, belanja, email, dan lainnya
  • Ruang chat biasa tidak mengaktifkan enkripsi ujung-ke-ujung (E2EE) secara default, sehingga Kakao Corp. secara struktur dapat mengakses pesan saat transit
  • Ada fitur E2EE opsional bernama Secure Chat, tetapi tidak mendukung pesan grup maupun panggilan suara
  • Tujuan PoC adalah mendaftarkan KakaoTalk for Windows/macOS atau klien open-source KiwiTalk ke akun korban untuk membaca pesan chat yang tidak terenkripsi ujung-ke-ujung

Titik masuk: WebView CommerceBuyActivity

  • WebView CommerceBuyActivity memiliki beberapa kondisi yang menguntungkan penyerang
    • Diekspos ke luar (exported) dan dapat dijalankan lewat deep link seperti kakaotalk://buy
    • JavaScript diaktifkan melalui settings.setJavaScriptEnabled(true)
    • Dari JavaScript, data juga bisa dikirim ke komponen aplikasi yang tidak diekspos ke luar melalui skema intent://
    • Pemrosesan URI juga kurang memadai karena Component atau Selector pada URI intent:// tidak dibersihkan menjadi null
  • WebView ini mengirim token akses di header Authorization pada permintaan HTTP
  • Debugging WebView aktif, sehingga perilakunya bisa diperiksa lewat chrome://inspect; saat diarahkan ke alamat eksternal, header Authorization ikut terekspos bersama permintaan GET
  • Jika penyerang dapat menjalankan JavaScript di dalam WebView ini, token akses pengguna bisa dicuri hanya dengan klik pada deep link kakaotalk://buy yang berbahaya

Bypass validasi URL dan rantai DOM XSS

  • CommerceBuyActivity tidak memuat URL penyerang secara langsung, melainkan menyusun deep link masukan menjadi URL yang diawali https://buy.kakao.com
    • Misalnya kakaotalk://buy/foo akan memuat https://buy.kakao.com/foo
    • Path, parameter query, dan fragment dapat dikendalikan penyerang
  • Endpoint https://buy.kakao.com/auth/0/cleanFrontRedirect?returnUrl= dapat melakukan redirect ke domain kakao.com mana pun, sehingga memperluas ruang serangan untuk mencari XSS di subdomain kakao.com
  • Di m.shoppinghow.kakao.com, ditemukan endpoint yang meneruskan kueri pencarian ke sink innerHTML, sehingga DOM XSS dimungkinkan dengan payload sederhana
  • Disebutkan juga bahwa stored XSS yang pernah ada sebelumnya sempat ditemukan, tetapi per Mei 2024 tampaknya sudah diperbaiki
  • Dengan kombinasi ini, ketika pengguna mengklik deep link berbahaya, JavaScript arbitrer dapat dijalankan di dalam WebView CommerceBuyActivity, lalu token akses dari header Authorization dapat dikirim ke luar

Akses ke Kakao Mail dan reset akun dengan token

  • Token akses KakaoTalk yang bocor dapat digunakan untuk mengakses akun Kakao Mail milik korban
  • Setelah memastikan korban menggunakan Kakao Mail, penyerang dapat memperoleh token terpisah dan mengakses talk.mail.kakao.com
  • Bahkan jika korban belum memiliki akun Kakao Mail, akun baru bisa dibuat atas nama korban, dan saat membuat alamat email baru, memilih Set As Primary Email dapat menimpa alamat email terdaftar yang lama tanpa verifikasi tambahan
  • Setelah mendapat akses ke Kakao Mail, langkah berikutnya adalah reset kata sandi KakaoTalk
    • Informasi tambahan yang dibutuhkan seperti alamat email, nama panggilan, dan nomor telepon korban bisa diperoleh dari panggilan API pengaturan akun yang sama
    • Proses reset kata sandi di accounts.kakao.com memiliki 2FA SMS, tetapi alur itu dapat diubah menjadi verifikasi email dengan mencegat dan memodifikasi request serta response menggunakan Burp
    • Kode verifikasi dapat dilihat di Kakao Mail milik korban

Pendaftaran klien PC dan akses pesan

  • Saat login ke KakaoTalk for Windows/macOS atau KiwiTalk dengan kredensial korban, tetap dibutuhkan faktor autentikasi kedua
  • Autentikasi ini menggunakan PIN 4 digit; PIN ditampilkan di versi PC untuk dimasukkan ke aplikasi mobile, atau sebaliknya dikirim ke aplikasi mobile untuk dimasukkan ke aplikasi PC
  • PIN sulit di-bruteforce, dan endpoint terkait memiliki pembatasan laju berupa blokir setelah 5 kali percobaan
  • Namun dengan token akses yang bocor, PIN dapat dikirimkan atau diambil dari backend KakaoTalk
  • Melalui proses ini, perangkat yang dikendalikan penyerang dapat didaftarkan ke akun KakaoTalk korban, sehingga PoC untuk membaca pesan chat yang tidak terenkripsi ujung-ke-ujung pun selesai

Pengungkapan, perbaikan, dan materi riset

  • Kerentanan ini diberi kode CVE-2023-51219
  • Peneliti merilis alat agar peneliti keamanan lain dapat menganalisis luasnya permukaan serangan KakaoTalk
  • Kerentanan ini dilaporkan pada Desember 2023 melalui Kakao Bug Bounty Program
  • Pelapor menyatakan tidak menerima imbalan karena program tersebut membatasi penerima hadiah hanya untuk warga Korea
  • Kakao Corp. segera menonaktifkan https://buy.kakao.com, menghapus redirect /auth/0/cleanFrontRedirect?returnUrl=, dan pada versi berikutnya juga menghapus CommerceBuyActivity yang rentan

1 komentar

 
GN⁺ 2024-06-27
Opini Hacker News
  • Kalau tinggal di Korea, sulit hidup tanpa memakai Kakao, dan karena aplikasi ini dipakai sampai generasi nenek-nenek, banyaknya celah keamanan adalah hal yang mengkhawatirkan
    Apalagi kalau kerentanannya membuat domain tampak sah, nenek-nenek akan sulit menyadari tautan mencurigakan, dan menurut saya budaya kerja Korea yang hierarkis juga ikut berperan
    Atasan menetapkan tenggat fitur yang tidak bisa dinegosiasikan, kerentanan keamanan tidak terlihat sementara UI terlihat, jadi akhirnya dipangkas seadanya lalu dirilis
    Ujung-ujungnya jadi aplikasi penuh celah keamanan, dan sepertinya tidak akan benar-benar diperbaiki sampai harga saham Kakao turun
    • Saya orang Korea, tapi tidak memakai KakaoTalk, LINE, maupun Facebook. Memang jadi agak aneh, tetapi banyak layanan menyediakan alternatif SMS, jadi tetap bisa hidup tanpa itu
      Untuk sisi keamanan, menurut saya ini bukan karena budaya kerja Korea, karena perusahaan IT besar yang sering dikelompokkan sebagai Neka-Raku-Bae—Naver, Kakao, LINE, Coupang, Woowa Bros—cenderung punya budaya kerja dan kompensasi yang jauh di atas rata-rata
      Kemungkinan lebih karena ini aplikasi untuk pasar domestik sehingga tidak mendapat pemeriksaan sebanyak aplikasi yang populer secara global. Namun berdasarkan pengalaman saya, kompensasinya lebih rendah dibanding AS atau sebagian startup Korea
    • Tenggat yang mustahil dan budaya kerja hierarkis tidak hanya ada di Korea, tetapi di seluruh dunia
      Perbedaannya tampaknya di Korea sektor pemerintah dan chaebol mengambil porsi besar pasar IT, sehingga tidak banyak ruang bagi budaya startup untuk membuat perbedaan
      Kakao juga dulu pernah menjadi startup yang keren, tetapi setelah sukses rasanya mereka berusaha meniru chaebol
    • Fenomena atasan atau pelanggan bisa melihat UI tetapi tidak bisa melihat masalah keamanan bukan hanya terjadi di Korea
      Budaya mungkin membuatnya lebih parah di Korea, tetapi ini jelas juga terjadi di dunia Barat dan pada dasarnya merupakan masalah yang nyaris universal
    • Saya penasaran apakah masalah ini cukup untuk diliput berita Korea atau ditangkap regulator. Selain harga saham, mungkin ada jalur lain untuk meminta pertanggungjawaban
    • Budaya kerja hierarkis sering dipakai seperti alasan serbaguna oleh orang Amerika saat menjelaskan hal-hal yang tidak mereka sukai di Asia Timur
      Cukup bekerja beberapa tahun di perusahaan kantoran Amerika yang cukup besar, terutama teknologi, keuangan, konsultansi, atau FAANG, dan Anda akan tahu dunia Barat juga sama saja
      Engineer tingkat menengah mengiyakan VP demi masuk siklus promosi berikutnya, dan perusahaan hanya pandai memasarkan “organisasi datar”, padahal kenyataannya itu lebih mirip slogan PR
      Saat PM atau SVP memberi instruksi, sering kali tidak ada yang bertanya langsung, hanya menggerutu lalu mengerjakannya; yang lebih pahit adalah sikap yang begitu saja percaya pada pemasaran budaya perusahaan seperti ini berujung pada rasa superioritas yang dangkal
  • Yang menarik, aplikasi ride-sharing Barat tidak terlalu berhasil di Korea, dan perusahaan ini juga membuat aplikasi ride-hailing utama Korea
    Dalam perjalanan terbaru ke Seoul, saya harus membuat akun aplikasi chat mobile itu untuk login ke aplikasi tersebut, pengalaman penggunanya juga tidak bagus, dan karena sebagian besar berbahasa Korea, saya cukup kesulitan
    Saya tidak mendapat kesan bahwa operasinya sangat profesional
    • Saat tinggal di Korea beberapa tahun lalu, menarik melihat ekosistem aplikasi dan layanan yang terbentuk secara terpisah
      KakaoTalk dan Naver hampir menjalankan peran seperti WhatsApp/Meta dan Google di dunia Barat
      Menurut saya hebat bahwa mereka tetap bertahan meski persaingan dengan perusahaan multinasional makin besar. Di banyak negara lain, perusahaan teknologi lokal nyaris menjadi tidak berarti dalam 10 tahun terakhir, dan itu disayangkan
    • Ketika saya pergi sekitar 5 tahun lalu, saya sama sekali tidak bisa memakai aplikasi taksi karena tidak punya rekening bank Korea
      Jadi menangkap taksi di jalan pun sulit, dan kebanyakan tampaknya hanya mengambil penumpang panggilan aplikasi
      Sekali waktu saya akhirnya berhasil menghubungi sopir taksi, tetapi ia menolak mengangkut saya karena saya “orang asing”; saya tidak tahu apakah itu benar-benar kebencian, tidak suka pembayaran tunai, karena tidak bisa berbahasa Korea, atau salah paham
      Perjalanan taksi yang akhirnya berhasil pun mengambil rute menyeberangi gunung ke sisi lain kota, sehingga saya harus menelepon orang yang saat itu saya kencani agar menjelaskan kepada sopir bahwa jalannya salah. Saya melihat ini sebagai risiko pergi ke negara asing tanpa persiapan yang cukup
    • Hal yang mengejutkan saya di Korea adalah ada sangat banyak alternatif lokal untuk produk teknologi yang saya kira dipakai secara global, sementara versi global/AS nyaris tidak menembus pasar
      Saat saya berkunjung pada awal 2015, Google adalah salah satu contohnya
    • Saya tidak mengerti apa hubungannya fakta wajar bahwa aplikasi Korea “sebagian besar” berbahasa Korea dengan pengalaman pengguna atau kurangnya profesionalisme
      Memang Anda berharap aplikasi Korea memakai bahasa apa, bahasa Prancis?
    • Seperti sudah dikatakan orang lain, Uber berfungsi di Korea, setidaknya di Seoul
      Namun setahu saya itu lebih mirip proxy KakaoTaxi yang memakai antarmuka Uber daripada Uber sungguhan
  • Perlu sedikit koreksi. KakaoTalk bukan aplikasi “all-in-one” seperti WeChat
    Aplikasi chat utamanya memang punya fitur tambahan seperti pemberian hadiah yang memungkinkan kerentanan ini, tetapi pemanggilan taksi dilakukan bukan di KakaoTalk, melainkan di aplikasi mobilitas Kakao T, yang juga menyediakan skuter sewaan, sepeda listrik, serta pemesanan kereta dan penerbangan
    Ada integrasi dengan platform pembayaran KakaoPay, tetapi layanannya sendiri ada di aplikasi terpisah, lebih mirip Google di Android yang memakai ID pusat untuk mengakses berbagai layanan
    Jadi saya pikir alasan aplikasi ini punya banyak titik akses juga karena integrasi layanan mereka sendiri
    • Ini tidak akurat
      Seperti WeChat, KakaoPay cukup terintegrasi ke KakaoTalk, sehingga mayoritas pengguna memakai KakaoPay hanya di dalam KakaoTalk, bukan lewat aplikasi KakaoPay
      Fakta bahwa ada aplikasi KakaoPay terpisah tidak banyak berpengaruh, dan tanpa aplikasi KakaoPay pun Anda bisa mengirim, menerima uang, dan membayar dari KakaoTalk
  • Katanya hadiah hanya tersedia untuk warga Korea; pada titik ini, rasanya mereka pantas saja dihajar para peretas
    • Bahkan untuk orang Korea, hadiah maksimal sekitar 7.000 dolar; itu sangat rendah untuk aplikasi yang tampaknya punya banyak masalah keamanan
    • Ini adalah struktur yang mendorong orang menjual bug
  • Saya teringat pendiri Telegram yang membanggakan talenta timnya dengan mengatakan klien mobile dikerjakan oleh satu developer
    Ternyata klien itu penuh bug yang menampilkan pesan kepada pengguna yang salah
    Aplikasi chat mobile tidak boleh dikembangkan dengan gaya “bergerak cepat dan merusak banyak hal”, dan menurut saya inilah hasil alami dari aplikasi all-in-one seperti Kakao
    • Saya penasaran apakah maksudnya beberapa akun pengguna ditambahkan di aplikasi mobile, lalu pesan dari satu akun ditampilkan di akun lain
      Kalau bukan itu, kelihatannya lebih dekat ke bug server daripada bug klien
    • Aplikasi chat itu sulit, dan aplikasi pesaing juga punya banyak bug serupa, jadi ini saja tidak tampak sebagai bukti kualitas yang buruk
      Selain itu, Telegram termasuk aplikasi chat paling stabil, kaya fitur, dan mudah dipakai yang pernah saya gunakan
    • Untuk membela Telegram, hal serupa juga banyak terjadi di layanan besar seperti Facebook, Google, dan Apple
    • Software yang dibuat dengan desain ala komite pun bisa punya bug mengerikan
    • Kakao jelas tidak bergerak cepat
  • Mengejutkan bahwa seseorang melaporkan kerentanan pada Desember 2023 melalui Bug Bounty Program Kakao, tetapi tidak mendapat apa pun karena hadiah hanya bisa diterima orang Korea
    • Setidaknya pembatasannya memang dipublikasikan di situs bug bounty
      Tertulis harus “orang Korea yang tinggal di dalam atau luar negeri”
      https://bugbounty.kakao.com/home
      Akan lebih buruk jika seseorang mengirim laporan dengan harapan bisa dibayar lalu baru kemudian mengetahui bahwa itu dibatasi untuk warga negara Korea
      Sebagai tambahan, hadiahnya juga sangat rendah: mulai minimal 50.000 won, sekitar 35 dolar, sampai maksimal 10 juta won, sekitar 7.100 dolar
    • Di Korea hal seperti ini cukup umum
      Sebagai orang asing yang membangun startup di Seoul selama 9 tahun terakhir, saya sudah beberapa kali mengalami hal serupa
  • Kita perlu mundur selangkah dan memikirkan ulang cara rekayasa perangkat lunak zaman sekarang
    Perlu dipertanyakan apakah ini untuk permainan jangka panjang, atau untuk keuntungan jangka pendek yang dinikmati segelintir orang
  • Saya penasaran seberapa besar personel militer AS yang ditempatkan di Korea terdampak oleh kerentanan ini
    Apakah ada yang diketahui soal eksploitasi di lingkungan nyata?
  • Layanan ini sudah lebih dari 10 tahun, tetapi masih belum punya versi web; melihat berita ini, mungkin justru itu hal yang baik
    • Tetap saja saya berharap ada versi web. Karena sulit menjalankan aplikasi Kakao secara stabil di Linux dengan wine