eSIM / Java Card VM İstismarı

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Genel Bakış

Embedded SIM’ler (eSIM’ler) Embedded UICC (eUICC) akıllı kartları olarak uygulanır ve bir secure element üzerinde Java Card Virtual Machine (JC VM) çalıştırır. Profiller ve applet’ler Remote SIM Provisioning (RSP) ile over-the-air (OTA) olarak sağlanabildiği için, JC VM içindeki herhangi bir bellek-güvenliği hatası anında handset’in en ayrıcalıklı bileşeni içinde uzaktan kod yürütme ilkeline dönüşür.

Bu sayfa, Kigen’in eUICC’sinde (Infineon SLC37 ESA1M2, ARM SC300) getfield ve putfield bytecode’larındaki eksik tip-güvenliği kontrollerinden kaynaklanan gerçek dünya tam bir ele geçirilişi açıklar. Aynı teknik, on-card byte-code doğrulamasını atlayan diğer tedarikçilere karşı yeniden kullanılabilir.

Saldırı Yüzeyi

  1. Remote Application Management (RAM)
    eSIM profilleri rastgele Java Card applet’leri gömebilir. Provisioning, SMS-PP (Short Message Service Point-to-Point) veya HTTPS üzerinden tünellenebilen standart APDU’larla gerçekleştirilir. Eğer bir saldırgan bir profilin RAM keys’lerine sahipse (veya çalarsa), uzaktan kötü amaçlı bir applet’i INSTALL/LOAD edebilir.
  2. Java Card byte-code execution
    Kurulumdan sonra applet VM içinde çalışır. Eksik run-time kontroller bellek bozulmalarına izin verir.

2024–2025 ekosistem değişiklikleri

  • GSMA TS.48 v7.0 (18 Jun 2025) Generic Test Profile’dan public RAM keyset’lerini kaldırdı ve rastgeleleştirilmiş anahtarlar sağlanmadıkça INSTALL’i engelliyor; önbelleğe alınmış v≤6 profilleri hâlâ statik RAM key’leri açığa çıkarıyor ve istismar edilebilir durumda kalıyor.
  • GSMA AN‑2025‑07 (09 Jul 2025) kart üzeri bytecode doğrulamasını öneriyor; çoğu eUICC hâlâ tam doğrulamayı atladığı için VM bellek hataları applet kurulumu sonrası erişilebilir durumda kalıyor.
  • Kigen OTA hardening (Jul 2025) legacy TS.48 test profilleri etkin olduğunda applet yüklemeyi engelliyor ve run-time kontroller ekliyor, ancak patchlenmemiş cihazlar hâlâ savunmasız.

Tip Karışıklığı Primitifi

getfield / putfield yalnızca object references üzerinde çalışması gereken instruksyonlardır. Kigen eUICC’de instruksyonlar yığında bulunan operand’ın bir object mi yoksa bir array referansı mı olduğunu hiçbir zaman doğrulamıyor. Çünkü bir array.length kelimesi normal bir objenin ilk instance alanıyla tam olarak aynı offset’te bulunur, bir saldırgan şunları yapabilir:

  1. Bir byte-dizi oluşturun byte[] buf = new byte[0x100];
  2. Bunu şu şekilde cast edin Object o = (Object)buf;
  3. putfield kullanarak bitişik bir object içindeki herhangi bir 16-bit değeri (VTABLE / ptr translation girişleri dahil) üzerine yazın.
  4. Dahili pointer’lar ele geçirildiğinde getfield kullanarak isteğe bağlı belleği okuyun.
// Pseudo-bytecode sequence executed by the malicious applet
// buf = newarray byte 0x100
// o   = (Object) buf            // illegal but not verified
// putfield <victimObject+offset>, 0xCAFE // arbitrary write
// ... set up read-what-where gadgets ...

The primitive provides arbitrary read / write in the eUICC address space – enough to dump the device-unique ECC private key that authenticates the card to the GSMA ecosystem.

Uçtan Uca İstismar İş Akışı

  1. Firmware’i Belirleme – Dökümante edilmemiş GET DATA öğesi DF1F’i kullanın:
80 CA DF 1F 00   // → "ECu10.13" (vulnerable)
  1. Kötü Amaçlı Applet’i OTA ile Yükleme – TS.48 Generic Test Profile’ın bilinen herkese açık anahtarlarını suistimal edin ve CAP dosyasını taşıyan SMS-PP parçalarını gönderin; bunları LOAD ardından INSTALL takip eder:
// simplified APDU chain
80 E6 02 00 <data>   // LOAD (block n)
80 E6 0C 00 <data>   // INSTALL for load
  1. Type-confusion tetikleme – Applet seçildiğinde, pointer tablosunu ele geçirmek için write-what-where gerçekleştirir ve normal APDU yanıtları aracılığıyla belleği leak eder.
  2. GSMA sertifika anahtarını çıkarma – Özel EC anahtar applet’in RAM’ine kopyalanır ve parçalar halinde döndürülür.
  3. eUICC’yi taklit etme – Çalınan anahtar çifti + sertifikalar, saldırganın herhangi bir RSP sunucusuna meşru bir kart olarak kimlik doğrulamasını sağlar (bazı operatörler için EID bağlaması hala gerekebilir).
  4. Profilleri indirme ve değiştirme – Düz metin profiller OPc, AMF, OTA keys ve hatta ek applet’ler gibi son derece hassas alanlar içerir. Saldırgan şunları yapabilir:
  • Profili ikinci bir eUICC’ye klonlamak (voice/SMS hijack);
  • Java Card uygulamalarını patch’lemek (ör. tekrar yüklemeden önce STK spyware eklemek);
  • Operatör gizli bilgilerini çıkarmak ve geniş çaplı kötüye kullanım için kullanmak.

Klonlama / Kaçırma Gösterimi

Aynı profili PHONE A ve PHONE B’ye yüklemek, Mobile Switching Centre’ın gelen trafiği en son kayıt olan cihaza yönlendirmesine neden olur. Gmail 2FA SMS’in tek bir oturumu, mağdur için MFA’yı atlatmak için yeterlidir.

Otomatik Test & Exploit Araç Takımı

Araştırmacılar, bir Java Card VM’nin zafiyetli olup olmadığını hemen gösteren bsc (Basic Security Check) komutu içeren dahili bir araç yayınladılar:

scard> bsc
- castcheck        [arbitrary int/obj casts]
- ptrgranularity   [pointer granularity/tr table presence]
- locvaraccess     [local variable access]
- stkframeaccess   [stack frame access]
- instfieldaccess  [instance field access]
- objarrconfusion  [object/array size field confusion]

Modules shipped with the framework:

  • introspector – tam VM ve bellek gezgini (~1.7 MB Java)
  • security-test – genel doğrulama bypass appleti (~150 KB)
  • exploit – 100 % güvenilir Kigen eUICC tam ele geçirme (~72 KB)

Mitigations

  1. On-card byte-code verification – sadece stack-top yerine tam kontrol-akışı & veri-akışı tipi takibini zorunlu kılın.
  2. Hide array headerlength’i çakışan nesne alanlarının dışında konumlandırın.
  3. Harden RAM keys policy – profilleri asla public keys ile göndermeyin; test profillerinde INSTALL’ı devre dışı bırakın (TS.48 v7 RAM keysets’i kaldırır).
  4. RSP server side heuristics – EID başına profil indirmelerini rate-limit edin, coğrafi anormallikleri izleyin, sertifika tazeliğini doğrulayın.
  5. Keep devices off legacy test profiles – TS.48 v≤6 ile applet yüklemeyi engelleyen Temmuz 2025 OTA’sını uygulayın veya fabrika görüntülerinden test profilini kaldırın.

Quick Checklist for Pentesters

  • Query GET DATA DF1F – vulnerable firmware string ECu10.13 Kigen olduğunu gösterir.
  • Inspect loaded profiles: TS.48 test profilleri, statik RAM keys içerenler (v≤6) doğrudan exploitable; RAM keys olmayan v7 için yeni bir key leak gerekir.
  • Check if RAM keys are known ‑> attempt OTA INSTALL/LOAD.
  • After applet installation, brute-force simple cast primitive (objarrconfusion).
  • Try to read Security Domain private keys – başarı = tam ele geçirme.

References

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin