1 poin oleh GN⁺ 2025-07-03 | 1 komentar | Bagikan ke WhatsApp
  • 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 SecurityStringsAPI di 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 API
    • chat1.chat.iamjoy.cn: Tampaknya API untuk seluruh fungsi perangkat, termasuk ChatGPT dan app store; jika dibuka di browser, muncul halaman login
    • chat2.chat.iamjoy.cn: Tampaknya memiliki sifat yang sama dengan chat1, kemungkinan server cadangan
    • openspeech.bytedance.com: Diduga sebagai cadangan pengenalan suara, tetapi komunikasi perangkat tidak berhasil dikonfirmasi
    • www.airdimple.cn: Tampak seperti mirror atau proxy OpenAI API
  • File SecurityStringsAPI berisi 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 Dan dan In-Love Dan
    • Angry Dan berisi 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 Membership di 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 SecurityStringsAPI secara langsung mengungkap kegunaan endpoint API terenkripsi, sehingga API getBindDevQrCode ditemukan
  • 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 Cheese2 dan nama belakang Delight2 terekspos dalam respons sebagai Cheese2Delight2
  • 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 signature baru
    • 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

 
GN⁺ 2025-07-03
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.

    • Dari sudut pandang orang yang cukup banyak pengalaman di aplikasi mobile dan sedikit IoT, saya rasa ini sangat mungkin terjadi. Sama sekali tidak mengejutkan.
      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.
    • Kunci API yang di-hardcode dan endpoint backend yang dilindungi asal-asalan sangat umum dijumpai di aplikasi mobile. Mirip seperti XSS/SQL injection yang dulu umum di aplikasi web.
      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.
    • Industri IoT dan embedded sering terobsesi pada perlindungan kekayaan intelektual, perlindungan kode dengan fuse, dan semacamnya, tetapi gagal mengelola siklus hidup secret dengan benar.
      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.
    • Sepertinya kita akan melihat banyak kasus seperti ini ketika gelombang aplikasi vibe coding benar-benar datang.
  • 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.

    • Masalah keamanan siber adalah sekali saja gagal, tamat.
  • Sulit dipercaya bahwa fungsi decrypt hanya melakukan decoding base64, tetapi saya terlalu sering melihat orang mengira base64 adalah string yang aman, jadi ini juga tidak sepenuhnya mustahil.

    • Data sandi mentahnya memang dienkode dengan base64, kemungkinan agar mudah dimasukkan ke dalam string.
      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.
    • Ada bagian yang mengatakan, “tapi ada tahap kedua, dan itu ditangani oleh native library yang sangat diobfuscate”.
    • Seharusnya mereka menyerahkan secure coding ke agen OAI.
    • Melihat debugging ADB dibiarkan aktif, saya bahkan tidak terlalu terkejut.
    • Ini cukup mudah sampai bisa dilakukan dengan satu halaman web yang keren. https://gchq.github.io/CyberChef/
      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.

    • Hampir semuanya berlaku jika pengabaian keamanan tidak mengancam keberlangsungan pelakunya sendiri.
  • Lucu bahwa menjalankan DOOM disebutkan lebih dulu daripada kemungkinan data pelanggan dicuri.

    • Saya menganggap run DOOM sebagai cat /etc/passwd yang 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.

    • Kalau tidak ada program bug bounty tetapi butuh cara kreatif untuk melempar uang ke seseorang, cara seperti ini bisa jadi menarik.
    • Kalau mereka pintar, mereka akan memasukkan klausul non-disparagement dan kerahasiaan dalam kontrak sponsor. Tapi sepertinya tidak begitu, jadi ini tampak lebih seperti upaya suap yang menyedihkan.
  • 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.

    • Menurut saya Republik Rakyat Tiongkok dan politisinya, sejarah Kekaisaran Tiongkok, serta pembicaraan politik dalam bahasa Mandarin semuanya bisa terkait dengan politik Tiongkok.
      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.
    • Jika kita menganggap LLM memiliki representasi matematis tentang seberapa dekat suatu frasa dengan “politik Tiongkok”, instruksi untuk menghindarinya relatif mudah dipahami.
      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.
    • Model seperti ChatGPT kemungkinan cukup memahami apa saja yang dilarang di Tiongkok. Namun “prompt engineer” naif dari aplikasi ini kemungkinan besar tidak cukup tahu untuk “memprogram” hal itu dengan baik.
      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 1989 ke 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?
    • Coba pikirkan mengapa mereka mengatakan ini. Bisa disimpulkan bahwa tujuannya adalah menghindari kontroversi atau terseret masalah.
      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.
    • Ini untuk mencegah pembahasan tentang Lapangan Tiananmen.
  • Balasan emailnya juga semuanya terlihat berjejak AI, jadi cukup lucu.

    • Sepertinya karena kendala bahasa dan penerjemahan.
  • 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

    • Saya setuju bahwa mereka bisa saja bekerja lebih erat dengan tim, tetapi pengumpulan log chat memang cukup mengkhawatirkan. Jika semua yang dikatakan pengguna dicatat, itu bukan sinofobia
      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
    • Saya tidak mengerti mengapa pernyataan “semua buatan Tiongkok memata-matai” dianggap sinofobia
      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?
    • Jika semua detail dalam tulisan itu benar, pemasok ini sangat menjijikkan cerobohnya terhadap apa pun yang menyerupai penghormatan kepada pelanggan, keamanan, dan privasi data
      Perusahaan ini tidak bisa ditolong. Ini bukan kondisi yang bisa diselamatkan dengan pengetahuan. Sampai di sini saja
    • Pandangan dunia “semua buatan Tiongkok memata-matai” jauh lebih akurat dalam memprediksi kenyataan dibandingkan pandangan dunia yang dibela di sini
      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
    • Rendahnya kebencian terhadap Jepang adalah karena Jepang tidak berhasil mempersenjatai teknologi untuk menciptakan negara polisi berbasis skor kredit sosial yang menargetkan kelompok minoritas
  • Saya suka upaya suap mereka yang menawarkan untuk “mensponsori” kanal YouTube kosong