1 puan yazan GN⁺ 2025-07-03 | 1 yorum | WhatsApp'ta paylaş
  • Ekranlı kulaklık kutusu aslında bir Android cihazına daha yakındı; ADB açık olduğu için uygulama çıkarma, sideload ve API analizi mümkün oldu
  • ChatGPT entegrasyonu cihazdan doğrudan OpenAI API'ye bağlanıyordu ve başlatıcı uygulamadaki SecurityStringsAPI ile obfuscate edilmiş yerel kütüphane aşılınca API anahtarı ve sistem prompt'u ortaya çıktı
  • Yardımcı uygulama ve sunucu API'si, yalnızca device id/IMEI ile sohbet geçmişini sorgulayabiliyordu; eğitim videosunda görünen demo cihaz kimliğiyle tüm demo sohbet geçmişi alınabildi
  • Rastgele IMEI ile QR kod oluşturulunca henüz bağlanmamış cihazlar uygulamaya bağlanabiliyordu; zaten bağlanmış cihazlarda ise hata yanıtı hesap sahibinin ad-soyad birleşimini açığa çıkarıyordu
  • IKKO inceleme ve uygulama/cihaz güncellemeleriyle sohbet sorgularına imzalı başlık ekledi, ancak 13 Ocak 2025 güncellemesi itibarıyla proxy API hâlâ yalnızca okhttp/4.9.0 User-Agent istiyordu ve eski ChatGPT API anahtarı ancak o zaman değiştirildi

Ekranlı kulaklık kutusunun aslında ne olduğu

  • IKKO Activebuds, kutu ekranında saat ve ChatGPT'yi öne çıkaran bir kulak içi kulaklık cihazı
  • Çeviri gibi yapay zeka özellikleri de sunuyor ve IKKO mağazasından uygulama yüklenebiliyor
  • Google Play Store yok ve CEO bunu, uygulamaların ActiveBuds ekranına uygun şekilde değiştirilmiş olmasıyla açıklıyor
  • Mağazada Spotify gibi müzik uygulamaları ve Subway Surfers gibi oyunlar vardı, ancak küçük ekran nedeniyle gezinmek rahatsızdı
  • Uygulamaların varlığı ve çalışması, cihazın Android çalıştırdığını doğruluyordu
  • Varsayılan EQ profilindeki ses kalitesi iyi değildi; EQ eğrisi elle ayarlanırsa kullanılabilir seviyeye çıkabildiği değerlendirildi

ADB'nin açık olmasıyla başlayan analiz yolu

  • Cihazda tarayıcı olmadığından başka uygulamaları doğrudan indirmek zordu; Android ayarlar uygulaması açılabiliyordu ama yapı numarasına 7 kez dokunmak geliştirici modunu açmıyordu
  • Bilgisayara bağlandığında ADB'nin etkin olduğu görüldü ve bu sayede uygulama sideload mümkün hale geldi
  • DOOM sideload edildikten sonra ChatGPT entegrasyonunun arka planda nasıl çalıştığı incelenmeye başlandı
  • Root olmadan sistem sertifikası yüklenemediği için yalnızca HTTP incelemesiyle tam URL'leri görmek zordu, ancak uygulama çıkarma ve decompile ile gerekli bilgiler doğrulandı
  • Spreadtrum/Unisoc cihazlarda varsayılan imzalama anahtarı kullanıldığında bootloader kilit açma aracı kullanılabiliyordu; bu cihaz da buna dahildi
    • Ancak cihazda ses açma tuşu olmadığından kilit açma onay ekranı geçilemedi
    • Doğrudan imzalanmış bölümleri flash etmenin mümkün olabileceği düşünüldü, ancak buna devam edilmedi

APK içinde ortaya çıkan alan adları ve anahtarlar

  • APK çıkarma aracıyla uygulamalar dump edilip başlatıcı uygulama JADX ile açılınca iletişim kurulan alan adları ortaya çıktı
    • api.openai.com: OpenAI API
    • chat1.chat.iamjoy.cn: ChatGPT dışında uygulama mağazası gibi cihazın genel işlevleri için kullanılan API gibi görünüyordu; tarayıcıda açılınca giriş sayfası çıkıyordu
    • chat2.chat.iamjoy.cn: chat1 ile benzer nitelikte görünüyordu ve yedek sunucu olabilir
    • openspeech.bytedance.com: ses tanıma yedeği olabileceği tahmin edildi, ancak cihaz iletişimi doğrulanamadı
    • www.airdimple.cn: OpenAI API aynası veya proxy'si gibi görünüyordu
  • SecurityStringsAPI dosyasında şifrelenmiş endpoint'ler ve kimlik doğrulama anahtarları bulunuyordu
  • İlk aşama base64'tü; ikinci aşama ise yoğun biçimde obfuscate edilmiş bir yerel kütüphane tarafından işleniyordu
  • Uygulama root'lu başka bir cihaza sideload edilince sorunsuz çalıştı ve bu süreçte OpenAI anahtarı görüldü
  • ChatGPT sistem prompt'u da açığa çıktı; cihazda ayrıca Angry Dan ve In-Love Dan modları vardı
    • Angry Dan çok sayıda küfür içerdiği için 18 yaş üstü doğrulaması gerektiriyordu

Sohbet günlükleri ve yardımcı uygulamadaki kimlik doğrulama eksikliği

  • Cihaz, ChatGPT konuşmalarını chat1 alan adındaki başka bir endpoint'e kaydediyordu
  • İlgili istek başlıklarında mesaj, model, yanıt ve IMEI tabanlı device id bulunuyordu
  • Daha sonra yardımcı uygulama incelenirken, bu günlüklerin uygulamada cihazla yapılan geçmiş konuşmaları göstermek için kullanıldığı doğrulandı
  • Yardımcı uygulama, cihazın Membership menüsündeki QR kod taranarak bağlanıyordu
  • HTTP incelemesinde, uygulamanın hesap token'ı ve device id ile API'yi sorgulayıp cihazdaki tüm sohbetleri aldığı görüldü
  • Hesap token'ı çıkarıldığında da istek çalışmaya devam ettiği için, sohbet sorgulama API'sindeki fiili kimlik doğrulamanın yalnızca device id olduğu anlaşıldı
  • Eğitim videosundaki bir karede yeterince bulanıklaştırılmamış device id kullanılarak demo cihazın tüm sohbet geçmişi alınabildi
  • IMEI belirli aralıklara sahip olduğundan müşterilerin sohbet geçmişlerinin de tahmin yoluyla çıkarılabileceği ve bunun hassas bilgiler içerebileceği değerlendirildi

QR kod üretimi, isim ifşası ve mesaj enjeksiyonu

  • SecurityStringsAPI içindeki değişken adları, şifrelenmiş API endpoint'lerinin kullanım amacını açıkça belli ediyordu; bu sayede getBindDevQrCode API'si bulundu
  • Rastgele bir IMEI girildiğinde QR kodu base64 görseli üretilebiliyordu
  • Zaten başka bir uygulamaya bağlanmış bir cihaz eklenmek istendiğinde “zaten başka bir kullanıcıya bağlı” hatası dönüyor, böylece doğrudan ele geçirme engelleniyordu
  • Ancak hata yanıtı, uygulama hesabı oluşturulurken girilen adı açığa çıkarıyordu
    • Hesap oluşturma ekranında kullanıcı adı alanı yoktu; yalnızca ad ve soyad vardı
    • Örnek hesaptaki ad Cheese2, soyad Delight2 idi ve yanıtta Cheese2Delight2 olarak görünüyordu
  • Olası akış; IMEI tahmini, QR kod üretimi, bağlanmamış cihazı bağlama, bağlı cihazın adını açığa çıkarma ve ardından sohbet geçmişini sorgulama şeklindeydi
  • unbind_dev endpoint'i de vardı, ancak hesap token'ını denetlediği için rastgele IMEI'li cihazların bağlantısını kaldırmaya izin vermiyordu
  • Sohbet günlüğü endpoint'i de kimlik doğrulama için yalnızca device id kullandığından, başka kullanıcıların yardımcı uygulamasına rastgele metin gönderilebiliyordu
  • HTML ve JavaScript gönderilerek yardımcı uygulamaya saldırı denenmişti, ancak uygulama Vue kullandığından ve Vue'nun varsayılan HTML/JS ekleme koruması bulunduğundan enjeksiyon başarılı olmadı
  • Buna rağmen rastgele kullanıcılara dolandırıcılık amaçlı mesajlar gibi metinler gönderilebilecek durumdaydı

IKKO'nun yanıtı ve kalan açıklar

  • Güvenlik açıkları IKKO güvenlik ekibine e-postayla bildirildi
  • IKKO daha sonra uygulamayı kilitleyip bir hafta sürecek inceleme yapılacağını duyurdu
  • İnceleme sonrasında uygulama güncellemesi ve cihaz güncellemesi dağıtıldı
  • Sohbet geçmişi sorgulama endpoint'i artık yeni bir signature başlığı istemeye başladı
    • İmza; hesap token'ı, device id, dil ve mevcut zamanın açık anahtar/gizli anahtar ile parola kullanılarak kodlanmasıyla oluşturuluyordu
    • Bu değişiklikle geçerli bir hesap token'ı olmadan sohbet çekmek artık mümkün değildi
  • Ancak tahmin edilebilir IMEI ile QR kod üretip henüz bağlanmamış cihazları uygulamaya bağlayabilme sorunu devam ediyordu
  • Cihaz güncellemesinden sonra ChatGPT işlevi artık IkkoBuds dışındaki cihazlarda çalışmıyordu
  • Anahtarlar hâlâ cihazın içinde duruyordu ve o sırada değiştirilmemişti
  • Son e-postadan sonra bir buçuk ay boyunca ek yanıt gelmediği belirtildi
  • Yazının kaleme alındığı sırada kalan sorunlar şunlardı
    • Başka kullanıcıların uygulamasına mesaj enjeksiyonu yapılabilmesi
    • Henüz yardımcı uygulamaya bağlanmamış cihazların bağlanabilmesi
    • Zaten bağlanmış cihazların ad ve soyadının açığa çıkabilmesi

13 Ocak 2025 güncellemesi

  • @haro7z yardımıyla cihaz root edildi
  • Sonrasında IKKO, ChatGPT entegrasyonu kullanılmadan önce cihazın IMEI'sini doğrulayacak şekilde değişiklik yaptı
  • Doğrudan OpenAI çağrısı yerine bir proxy API kullanılmaya başlandı
  • Ancak bu proxy API ek kimlik doğrulama gerektirmiyordu; User-Agent'i okhttp/4.9.0 yapmak yeterliydi
  • Eski ChatGPT API anahtarı da nihayet bu noktada değiştirildi

1 yorum

 
GN⁺ 2025-07-03
Hacker News yorumları
  • Gerçekten akıl alır gibi değil. Sabit kodlanmış OpenAI anahtarı ve ADB erişiminin kutudan çıktığı hâliyle duruyor olması inanması zor
    Yine de tedarikçinin anahtarı değiştirmesi ve IMEI doğrulaması için bir proxy kurması bir ölçüde sorumluluk aldığını gösteriyor. Ama düzgün sandboxing ya da kimlik bilgilerinin güvenli saklanması yoksa hâlâ saatli bomba gibi hissettiriyor

    • Mobil uygulama tarafında çok deneyimi olan ve biraz da IoT yapmış biri olarak bunun gayet mümkün olduğunu düşünüyorum. Hiç şaşırtıcı değil
      Sektör “hızlı hareket ediyor” denir ama aynı zamanda sık sık “bir şeyleri kırıyor” ve başka alanlarda görebileceğiniz düzeyde mühendislik titizliği çok daha az
    • Sabit kodlanmış API anahtarları ve zayıf korunan backend uç noktaları mobil uygulamalarda şaşırtıcı derecede yaygın. Eski web uygulamalarında XSS/SQL injection’ın yaygın olmasına benziyor
      APK decompile etmek, geliştirici araçlarını açmaktan biraz daha yüksek bir bariyere sahip olduğu için daha az ilgi görüyor gibi. Donanım debugging’i ise daha da yüksek bariyerli; bu yüzden güvenlik yatırımı yapmaya zorlayacak güçlü bir teşvik yoksa bu tür donanım cihazlarının ortalama IoT cihazı “güvenliği” gibi çok kırılgan olacağını düşünüyorum
    • IoT ve gömülü sistemler sektörü fikrî mülkiyet korumasına, kodu fuse’larla korumak gibi şeylere takıntılıyken gizli değerlerin yaşam döngüsü yönetimini çoğu zaman beceremiyor
      Eskiden çalıştığım bir şirket cihaz içinde bunu iyi hallediyordu ama belirli bir anahtarı içeren test ekipmanını yurt dışına göndermek zorunda oldukları noktasını kaçırmıştı. Yani cihazı kıramasanız bile bir test ekipmanını “ele geçirirseniz” istediğiniz gibi kurcalayabiliyordunuz
    • Vibe coding uygulamaları dalgası iyice bastırınca böyle örnekleri çok göreceğiz gibi
  • Doğru düzgün yapılmamış AI çöpünü tutan bent kapakları açılacak, hazırlıklı olmak gerek. Kariyer değişikliği düşünüyorsanız siber güvenliğe atlamanın zamanı şimdi. Ortalık epey sertleşecek

    • Siber güvenliğin sorunu, bir kez batırmanın bile sonunuz olması
  • decrypt fonksiyonunun sadece base64 decode yapıyor olması inanılması zor bir şey ama base64’ü güvenli bir string sanan insanları o kadar sık görüyorum ki bir yandan da imkânsız değil

    • Ham şifreli verinin base64 ile encode edildiği doğru; muhtemelen string içine koymayı kolaylaştırmak için
      Asıl çözmeyi yapan decrypt fonksiyonu ayrı. Reverse engineering yapmanın ya da çalıştırıp dönüş değerini görmenin kolay olması ayrı konu; sadece base64’ten ibaret değil
    • “Ama ikinci bir aşama var ve bunu yoğun biçimde obfuscate edilmiş native library işliyor” kısmı var
    • Güvenli kodlamayı OAI agent’ına bırakmaları gerekirdi
    • ADB debugging açık bırakılmışsa pek şaşırtıcı da değil
    • Süslü bir web sayfasıyla bile yapılabilecek kadar kolay. https://gchq.github.io/CyberChef/
      Tabii gchq tarafından yapıldığı için biraz gösterişli. “magic” seçeneği de var. Güzel yanı, indirip hiçbir iletişim olmadan tarayıcıda yerel olarak doğrudan çalıştırabilmeniz
  • “IoT’deki S, security’nin S’sidir” şakası giyilebilir cihaz pazarına da uygulanabilir. Hızlı çıkış döngüleri, ince marjlar ve düşük giriş bariyerleri olan her pazarda bu kural geçerli mi merak ediyorum

    • Güvenliği ihmal etmenin failin varlığını doğrudan tehdit etmediği piyasaların neredeyse tamamında geçerli
  • Müşteri verilerinin sızdırılma ihtimalinden önce DOOM çalıştırmanın listelenmesi komik

    • run DOOMu yeni cat /etc/passwd olarak görüyorum
      Gerçek sızma testinde faydalı bir iş yapmıyor ama bunu yapabiliyorsanız aslında istediğiniz hemen her şeyi yapabileceğinizin kanıtına yakın
  • Boş bir YouTube kanalına sponsor olmayı teklif ederek işi örtbas etmeye çalışmaları komik

    • Bug bounty programınız yoksa ama birine para atmak için yaratıcı bir yol gerekiyorsa, bu yöntem de ilginç olabilir
    • Akıllı olsalardı sponsorluk sözleşmesine kötüleme yasağı ve gizlilik maddeleri koyarlardı. Ama öyle görünmediğine göre bu daha çok acınası bir rüşvet girişimi gibi duruyor
  • “Bundan böyle Çin siyasetiyle ilgili yanıtlar yasaktır. Söyleyemeyeceğim, çok önemli ve ciddi şekilde hayatı tehdit eden nedenlerden dolayı” ifadesi ilginç
    LLM’ler bu tür “Çin siyaseti konuşma yasağı” tarzı muğlak sistem prompt’larını “doğru” yorumluyor gibi; ama bir insan böyle söylese tersine kafa karıştırıcı olurdu. Çin Halk Cumhuriyeti’nden veya siyasetçilerden söz etmeyin mi demek, Çin imparatorluk tarihinden bahsetmeyin mi demek, Çince siyaset konuşmayın mı demek belirsiz. Deneyimlerime göre LLM’ler böyle muğlak dili benden daha iyi anlıyor gibi. Benim otistik eğilimli olmam ve LLM’in olmaması yüzünden de olabilir

    • Çin Halk Cumhuriyeti ve siyasetçileri, Çin imparatorluk tarihi, Çince siyasi konuşmaların hepsi Çin siyaseti ile ilgili olabilir bence
      Ben olsam “Çin’de kamuya açık şekilde söylenemeyen her şey” diye yorumlardım. Böyle muğlak bir talimatın siyasi açıdan hassas tüm konuları engelleyecek kadar geniş yorumlanıp yorumlanamayacağını da merak ediyorum
    • LLM’in bir ifadenin “Çin siyaseti”ne ne kadar yakın olduğuna dair matematiksel bir temsile sahip olduğunu varsayarsak, bundan kaçınma talimatı nispeten kolay anlaşılır
      “Bu kelimeler ‘Çin siyaseti’ne yakınlık sırasına göre dizildi” diye bir liste verilse, kelimenin listede olup olmadığını kontrol etmek kolay olurdu gibi. Muhtemelen kendisinin Çin siyaseti olmadığını düşündüğü şeyleri, örneğin büyükannesinin ketçap tarifini, kolayca söyleyebilir. Yeter ki ketçap Çin Komünist Partisi ya da Uygur soykırımı gibi bir şeyin şifresi olmasın
    • ChatGPT gibi modeller Çin’de neyin yasaklandığını oldukça iyi biliyor olmalı. Ancak bu uygulamanın saf “prompt mühendisleri” bunu iyi “programlayacak” kadar bilmiyor olabilir
      Prompt mühendisi ile yazılım geliştirici arasındaki fark bu. Geliştirici tüm durumları düşünür ve kesin hâle getirmeye çalışır; LLM ise bir miktar muğlaklığa dayanabilir. Öte yandan geliştiricilerin koda ya da Çin’e gidip gelen API isteklerine tiananmen square 1989 ifadesini özgürce koyamamasına da şaşırmam. Bahsedilmemesi gereken şeyden bahsedemiyorsanız, neye değinilmemesi gerektiğini nasıl ifade edebilirsiniz?
    • Neden böyle söylediklerini düşünmek yeterli. Tartışma çıkarmaktan ya da başlarını derde sokmaktan kaçınmak istedikleri sonucunu çıkarabilirsiniz
      O hâlde hangi konular baş ağrıtan tartışmalar yaratır? Açıkça modern Çin siyaseti; Çin tarihi genel olarak sorun değil, Çince Çin dışı siyaset de sorun değil. LLM’in böyle bir zihin teorisine sahip olduğunu düşünmüyorum ama bu yetiye sahip insanların ürettiği çok sayıda veriyle eğitildi
    • Tiananmen Meydanı tartışmasını engellemek için
  • E-posta yanıtlarının hepsinde de yapay zeka izleri görülüyor, bu da epey komik

    • Dil bariyeri ve çeviriden kaynaklanıyor olabilir
  • İyi bir yazıydı. Ancak içime takılan bir nokta var. Şirketin güvenlik açığı bildirimine verdiği yanıt, diğer şirketlerin %98’inden daha iyiydi.
    Çok olumlu karşıladılar ve en önemlisi ilgi gösterip sorunu ele aldılar. Ama asıl yazının yazarı sanki bunun yerine küçümseyici ve saldırgan bir tavır sergilemiş gibi; bu üzücü. Ayrıca her zamanki Çin karşıtlığı da görülüyor; örneğin “Çin malı olan her şey gözetler” türünden bir tutum. Genel olarak bu basit bir güvenlik tasarımı kusuru, ama baştan beri güvenliği ciddiye almamış olsalar bile bunu düzeltmeye çalışan bir şirketin olması iyi bir şey.

    • Ekiple daha yakın çalışılabileceğine katılıyorum, ama sohbet kayıtlarının toplanması gerçekten oldukça kaygı verici. Kullanıcının söylediği her şeyi kaydediyorsa bu Çin karşıtlığı değildir.
      Adil olmak gerekirse, bugünlerde ABD şirketlerinin kapsamlı logging uygulamalarına da aynı düzeyde düşmanca yaklaşmak gerekiyor gibi. Vance meme’i yüzünden engellenmemek için yani.
    • “Çin malı olan her şey gözetler” sözünün neden Çin karşıtlığı olduğunu anlamıyorum.
      Mümkün olduğunca çok kullanıcı verisi toplayıp merkeze göndermek, modern yazılım ve donanımın standart pratiği; buna “tüm kurumlar ve vatandaşlar devlet istihbarat çalışmalarını desteklemeli, yardımcı olmalı ve iş birliği yapmalıdır” diyen bir yasa eklendiğinde bunu başka nasıl yorumlamak gerekir?
    • Yazıdaki ayrıntıların hepsi doğruysa, bu tedarikçi müşteriye saygı, güvenlik ve veri gizliliğine benzeyen herhangi bir konuda iğrenç derecede özensiz.
      Bu şirkete yardım edilemez. Bilgiyle kurtarılabilecek durumda değiller. Hepsi bu.
    • “Çin malı olan her şey gözetler” dünya görüşü, burada savunulan dünya görüşüne kıyasla gerçeği çok daha doğru öngördü.
      “Çok olumlu karşıladılar” denmesi güzel, ama sorumsuzluğu ve ciddi beceriksizliği telafi etmenin bir sınırı var. En alt seviye, alev alev yanan çöp gibi bir ürün satmayı seçtiler ve ona göre muamele görmeliler.
    • Japonya karşıtlığının düşük olmasının nedeni, Japonya’nın teknolojiyi başarılı biçimde silah hâline getirip azınlık gruplarını hedef alan sosyal kredi puanlı polis devleti kurmamış olmasıdır.
  • Boş bir YouTube kanalına “sponsor” olmayı teklif eden rüşvet girişimi hoşuma gitti