Kasus Eksploitasi Kerentanan Earbud IKKO Activebuds “Berbasis AI”
(blog.mgdproductions.com)- Casing earbud dengan layar ini ternyata lebih mirip perangkat Android, dan karena ADB aktif, analisis berlanjut hingga ekstraksi aplikasi, sideload, dan analisis API
- Integrasi ChatGPT berkomunikasi langsung dari perangkat ke OpenAI API, dan API key serta system prompt terekspos melalui bypass
SecurityStringsAPIdi aplikasi launcher dan library native yang diobfuscate - Aplikasi pendamping dan API server dapat mengambil riwayat chat hanya dengan device id/IMEI, sehingga seluruh riwayat chat perangkat demo bisa diambil menggunakan ID perangkat demo yang terlihat dalam video tutorial
- Jika membuat kode QR dengan IMEI sembarang, perangkat yang belum di-bind dapat dihubungkan ke aplikasi, sementara untuk perangkat yang sudah di-bind, respons error mengungkap gabungan nama akun
- IKKO menambahkan header tanda tangan untuk pengambilan chat melalui inspeksi serta pembaruan aplikasi dan perangkat, tetapi per pembaruan 13 Januari 2025, proxy API hanya mensyaratkan User-Agent
okhttp/4.9.0, dan ChatGPT API key lama baru diganti saat itu
Identitas sebenarnya dari casing earbud dengan layar
- IKKO Activebuds adalah perangkat berbentuk earbud yang menonjolkan waktu dan ChatGPT pada layar casingnya
- Perangkat ini juga menyediakan fitur AI seperti terjemahan, dan aplikasi dapat dipasang dari IKKO Store
- Tidak ada Google Play Store, dan CEO menjelaskan bahwa ini karena aplikasi-aplikasi tersebut telah dimodifikasi agar sesuai dengan layar ActiveBuds
- Di store terdapat aplikasi musik seperti Spotify dan game seperti Subway Surfers, tetapi navigasinya kurang nyaman karena layarnya kecil
- Dari keberadaan dan cara kerja aplikasi, dipastikan bahwa perangkat ini menjalankan Android
- Kualitas suara profil EQ bawaan dinilai kurang baik, tetapi dengan menyesuaikan kurva EQ secara langsung, kualitasnya bisa dinaikkan hingga tingkat yang dapat dipakai
Jalur analisis yang terbuka karena ADB aktif
- Perangkat tidak memiliki browser sehingga sulit mengunduh aplikasi lain secara langsung, dan meski aplikasi Settings Android dapat dibuka, mengetuk build number 7 kali tidak mengaktifkan developer mode
- Saat dihubungkan ke PC, ADB ternyata aktif, sehingga sideload aplikasi menjadi mungkin
- Setelah melakukan sideload DOOM, analisis mulai dilakukan untuk melihat bagaimana integrasi ChatGPT bekerja di backend
- Karena sertifikat sistem tidak dapat dipasang tanpa rooting, sulit melihat URL yang tepat hanya dengan inspeksi HTTP, tetapi informasi yang diperlukan diperoleh lewat ekstraksi dan dekompilasi aplikasi
- Pada perangkat Spreadtrum/Unisoc yang memakai signing key bawaan, alat unlock bootloader dapat digunakan, dan perangkat ini juga termasuk demikian
- Namun karena perangkat tidak memiliki tombol volume up, layar konfirmasi unlock tidak dapat dilewati
- Metode mem-flash partisi yang ditandatangani sendiri dianggap mungkin, tetapi tidak dilanjutkan
Domain dan key yang terungkap di dalam APK
- Setelah men-dump aplikasi dengan alat ekstraksi APK dan membuka aplikasi launcher dengan JADX, domain komunikasi terungkap
api.openai.com: OpenAI APIchat1.chat.iamjoy.cn: Tampaknya API untuk seluruh fungsi perangkat, termasuk ChatGPT dan app store; jika dibuka di browser, muncul halaman loginchat2.chat.iamjoy.cn: Tampaknya memiliki sifat yang sama denganchat1, kemungkinan server cadanganopenspeech.bytedance.com: Diduga sebagai cadangan pengenalan suara, tetapi komunikasi perangkat tidak berhasil dikonfirmasiwww.airdimple.cn: Tampak seperti mirror atau proxy OpenAI API
- File
SecurityStringsAPIberisi endpoint terenkripsi dan key autentikasi - Tahap pertama adalah base64, dan tahap kedua diproses oleh library native yang sangat diobfuscate
- Saat aplikasi di-sideload ke perangkat lain yang sudah di-root, aplikasi tetap berjalan, dan dalam proses ini OpenAI key berhasil dikonfirmasi
- System prompt ChatGPT juga terekspos, dan perangkat juga memiliki mode
Angry DandanIn-Love DanAngry Danberisi banyak kata kasar sehingga membutuhkan konfirmasi usia 18 tahun ke atas
Log chat dan ketiadaan autentikasi pada aplikasi pendamping
- Perangkat mencatat percakapan ChatGPT ke endpoint lain di domain
chat1 - Header request tersebut berisi pesan, model, respons, dan device id berbasis IMEI
- Saat kemudian meneliti aplikasi pendamping, diketahui bahwa log ini digunakan untuk menampilkan percakapan masa lalu dengan perangkat di aplikasi
- Aplikasi pendamping melakukan binding dengan memindai kode QR dari menu
Membershipdi perangkat - Hasil inspeksi HTTP menunjukkan bahwa aplikasi mengambil semua chat yang dilakukan di perangkat dengan memanggil API menggunakan token akun dan device id
- Karena request tetap berfungsi meski token akun dihapus, autentikasi efektif API pengambilan chat hanyalah device id
- Dengan menggunakan device id yang tidak diburamkan dengan benar pada satu frame video tutorial, seluruh riwayat chat perangkat demo dapat diambil
- Karena IMEI memiliki rentang tertentu, disimpulkan bahwa riwayat chat pelanggan juga dapat diketahui dan mungkin berisi informasi sensitif
Pembuatan kode QR, kebocoran nama, dan injeksi pesan
- Nama variabel di
SecurityStringsAPIsecara langsung mengungkap kegunaan endpoint API terenkripsi, sehingga APIgetBindDevQrCodeditemukan - Jika memasukkan IMEI sembarang, gambar kode QR base64 dapat dibuat
- Saat mencoba menghubungkan perangkat yang sudah di-bind ke aplikasi lain, muncul error “sudah di-bind ke pengguna lain”, sehingga pengambilalihan sembarang terhalang
- Namun respons error mengungkap nama yang dimasukkan saat membuat akun aplikasi
- Layar pembuatan akun tidak memiliki kolom username, hanya nama depan dan nama belakang
- Pada akun contoh, nama depan
Cheese2dan nama belakangDelight2terekspos dalam respons sebagaiCheese2Delight2
- Alur yang mungkin adalah menebak IMEI, membuat kode QR, melakukan binding perangkat yang belum di-bind, mengungkap nama perangkat yang sudah di-bind, lalu mengambil riwayat chat
- Ada juga endpoint
unbind_dev, tetapi endpoint ini memeriksa token akun sehingga tidak mengizinkan pelepasan perangkat IMEI sembarang - Endpoint log chat juga hanya menggunakan device id untuk autentikasi, sehingga teks sembarang dapat dikirim ke aplikasi pendamping pengguna lain
- Upaya menyerang aplikasi pendamping dengan mengirim HTML dan JavaScript tidak berhasil, karena aplikasi memakai Vue dan perlindungan bawaan Vue terhadap injeksi HTML/JS
- Meski begitu, kondisinya tetap memungkinkan pengiriman teks seperti pesan penipuan kepada pengguna sembarang
Respons IKKO dan kerentanan yang tersisa
- Kerentanan dilaporkan melalui email ke departemen keamanan IKKO
- Setelah itu, IKKO mengumumkan bahwa aplikasi akan dikunci dan menjalani inspeksi selama satu minggu
- Setelah inspeksi, pembaruan aplikasi dan pembaruan perangkat dirilis
- Endpoint pengambilan riwayat chat kini mensyaratkan header
signaturebaru- Tanda tangan disusun dengan mengenkode token akun, device id, bahasa, dan waktu saat ini menggunakan public key/private key serta password
- Perubahan ini membuat pengambilan chat tanpa token akun yang valid menjadi tidak mungkin
- Namun masalah bahwa kode QR dapat dibuat dengan IMEI yang dapat ditebak untuk menghubungkan perangkat yang belum di-bind ke aplikasi masih tersisa
- Setelah pembaruan perangkat, fitur ChatGPT tidak lagi berjalan pada perangkat selain IkkoBuds
- Key masih tetap berada di dalam perangkat dan saat itu belum diganti
- Disebutkan bahwa tidak ada respons tambahan selama satu setengah bulan setelah email terakhir
- Pada saat artikel ditulis, masalah yang tersisa adalah sebagai berikut
- Dapat menginjeksi pesan ke aplikasi pengguna lain
- Dapat menghubungkan perangkat yang belum di-bind ke aplikasi pendamping
- Dapat mengungkap nama depan dan nama belakang perangkat yang sudah di-bind
Pembaruan 13 Januari 2025
- Dengan bantuan
@haro7z, perangkat berhasil di-root - Setelah itu, IKKO mengubahnya agar IMEI perangkat diperiksa sebelum integrasi ChatGPT digunakan
- Alih-alih memanggil OpenAI secara langsung, perangkat kini memakai proxy API
- Namun proxy API ini tidak memerlukan autentikasi terpisah; cukup mengatur User-Agent ke
okhttp/4.9.0 - ChatGPT API key lama akhirnya diganti pada titik ini
1 komentar
Komentar Hacker News
Benar-benar tidak masuk akal. Sulit dipercaya bahwa kunci OpenAI yang di-hardcode dan akses ADB disertakan begitu saja dalam kondisi bawaan pabrik.
Meski begitu, pemasoknya mengganti kunci dan menyiapkan proxy untuk verifikasi IMEI, jadi ada sedikit rasa tanggung jawab. Namun tanpa sandboxing yang benar atau penyimpanan kredensial yang aman, ini tetap terasa seperti bom waktu.
Industri ini katanya “bergerak cepat”, tetapi pada saat yang sama sering “merusak sesuatu”, dan jauh kurang memiliki ketelitian rekayasa seperti yang terlihat di bidang lain.
Dekompilasi APK hambatannya sedikit lebih tinggi daripada membuka developer tools, jadi tampaknya kurang mendapat perhatian. Debugging hardware hambatannya lebih tinggi lagi, jadi tanpa insentif kuat untuk memaksa investasi keamanan, perangkat keras seperti ini menurut saya akan sangat rentan, seperti “keamanan” perangkat IoT pada umumnya.
Salah satu perusahaan tempat saya dulu bekerja menanganinya dengan baik di dalam perangkat, tetapi melewatkan fakta bahwa peralatan uji yang memuat kunci tertentu harus dikirim ke luar negeri. Jadi meski perangkatnya tidak bisa ditembus, kalau seseorang “mendapatkan” satu alat uji, ia bisa bereksperimen sesuka hati.
Bersiaplah, karena pintu air yang selama ini menahan sampah AI yang dibuat asal-asalan akan terbuka. Kalau sedang mempertimbangkan pindah karier, sekarang saatnya masuk ke keamanan siber. Situasinya akan jadi cukup brutal.
Sulit dipercaya bahwa fungsi
decrypthanya melakukan decoding base64, tetapi saya terlalu sering melihat orang mengira base64 adalah string yang aman, jadi ini juga tidak sepenuhnya mustahil.Fungsi dekripsi yang benar-benar melakukan dekripsi ada terpisah. Terlepas dari fakta bahwa mudah melakukan reverse engineering atau menjalankannya untuk melihat nilai balikannya, ini bukan hanya base64 saja.
Memang agak keren karena dibuat oleh gchq. Ada juga opsi “magic”. Bagusnya, ini bisa diunduh dan dijalankan langsung secara lokal di browser tanpa komunikasi jaringan.
Lelucon “huruf S di IoT berarti security” juga bisa diterapkan ke pasar wearable. Saya jadi penasaran apakah aturan ini berlaku di pasar mana pun yang punya siklus rilis cepat, margin tipis, dan hambatan masuk rendah.
Lucu bahwa menjalankan DOOM disebutkan lebih dulu daripada kemungkinan data pelanggan dicuri.
run DOOMsebagaicat /etc/passwdyang baru.Dalam penetration test nyata, itu bukan hal yang berguna, tetapi jika Anda bisa melakukannya, itu hampir menjadi bukti bahwa pada dasarnya Anda bisa melakukan apa pun yang diinginkan.
Lucu bahwa mereka mencoba menutupi masalah dengan menawarkan sponsor ke kanal YouTube yang kosong.
Kalimat “Mulai sekarang, respons terkait politik Tiongkok dilarang. Ini karena alasan yang sangat penting dan serius mengancam nyawa, yang tidak bisa saya jelaskan” menarik.
LLM tampaknya menafsirkan prompt sistem yang samar seperti “jangan bicara politik Tiongkok” dengan “benar”, tetapi kalau manusia yang mengatakannya, justru terasa membingungkan. Tidak jelas apakah maksudnya jangan membahas Republik Rakyat Tiongkok atau politisinya, jangan membahas sejarah Kekaisaran Tiongkok, atau jangan berbicara tentang politik dalam bahasa Mandarin. Berdasarkan pengalaman, LLM tampaknya memahami bahasa ambigu seperti ini lebih baik daripada saya. Mungkin karena saya punya kecenderungan autistik dan LLM tidak.
Kalau saya, saya akan menafsirkannya sebagai “semua hal yang tidak boleh dikatakan secara publik di Tiongkok”. Saya juga penasaran apakah instruksi ambigu seperti ini bisa ditafsirkan cukup luas untuk memblokir semua topik yang sensitif secara politik.
Kalau diberi daftar “kata-kata ini diurutkan berdasarkan kedekatannya dengan ‘politik Tiongkok’”, rasanya mudah untuk mengecek apakah sebuah kata ada dalam daftar. Mungkin ia bisa dengan mudah membicarakan hal-hal yang menurutnya bukan politik Tiongkok, misalnya resep saus tomat nenek. Hanya saja semoga saus tomat bukan istilah sandi untuk Partai Komunis Tiongkok atau genosida Uighur.
Itulah perbedaan antara prompt engineer dan software developer. Developer mencoba memikirkan semua kasus dan membuatnya presisi, sedangkan LLM bisa menoleransi ambiguitas sampai batas tertentu. Di sisi lain, saya tidak akan terkejut jika para developer tidak bisa dengan bebas memasukkan
tiananmen square 1989ke dalam kode atau request API yang keluar-masuk Tiongkok. Jika Anda tidak boleh menyebut hal yang tidak boleh disebut, bagaimana Anda bisa menyatakan apa yang tidak boleh disebut?Kalau begitu, topik apa yang akan menimbulkan kontroversi merepotkan? Jelas politik Tiongkok modern, sementara sejarah Tiongkok pada umumnya baik-baik saja, dan politik non-Tiongkok dalam bahasa Mandarin juga baik-baik saja. Saya tidak menganggap LLM punya theory of mind seperti ini, tetapi ia dilatih pada banyak data yang dibuat oleh orang-orang yang punya kemampuan tersebut.
Balasan emailnya juga semuanya terlihat berjejak AI, jadi cukup lucu.
Itu tulisan yang bagus. Namun, ada satu hal yang mengganjal. Respons perusahaan terhadap laporan kerentanan ini lebih baik daripada 98% perusahaan lain
Sikap mereka sangat terbuka, dan yang terpenting, mereka menunjukkan perhatian serta menangani masalahnya. Namun sayangnya, penulis asli justru tampak menunjukkan sikap meremehkan dan agresif. Juga terlihat sikap sinofobia yang selalu muncul, misalnya anggapan seperti “semua buatan Tiongkok memata-matai.” Secara keseluruhan ini hanyalah cacat desain keamanan, tetapi meskipun sejak awal mereka tidak menangani keamanan dengan serius, fakta bahwa ada perusahaan yang mau memperbaikinya adalah hal yang baik
Agar adil, sepertinya logging luas oleh perusahaan AS saat ini juga perlu diperlakukan dengan tingkat kecurigaan yang sama. Supaya tidak sampai ditahan karena meme Vance, maksudnya
Jika praktik standar software dan hardware modern yang mengumpulkan sebanyak mungkin data pengguna lalu mengirimkannya ke kantor pusat digabungkan dengan undang-undang bahwa “semua organisasi dan warga negara harus mendukung, membantu, dan bekerja sama dalam pekerjaan intelijen negara,” bagaimana lagi kita harus melihatnya?
Perusahaan ini tidak bisa ditolong. Ini bukan kondisi yang bisa diselamatkan dengan pengetahuan. Sampai di sini saja
Bagus kalau mereka “sangat terbuka,” tetapi ada batasnya untuk memberi kompensasi atas ketidakbertanggungjawaban dan inkompetensi serius. Mereka memilih menjual produk sampah terbakar kelas paling rendah, dan harus diperlakukan sesuai itu
Saya suka upaya suap mereka yang menawarkan untuk “mensponsori” kanal YouTube kosong