eSIM / Java Card VM Exploitation

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Pregled

Embedded SIMs (eSIMs) su implementirane kao Embedded UICC (eUICC) smart-kartice koje pokreću Java Card Virtual Machine (JC VM) na vrhu secure element-a. Pošto se profili i appleti mogu provision-ovati over-the-air (OTA) putem Remote SIM Provisioning (RSP), svaka greška vezana za memory-safety unutar JC VM momentalno postaje remote code-execution primitiv unutar najprivilegovanije komponente handset-a.

Ova stranica opisuje realan potpuni kompromit Kigen-ovog eUICC-a (Infineon SLC37 ESA1M2, ARM SC300) prouzrokovan nedostatkom provere type-safety u getfield i putfield bytecode-ovima. Ista tehnika se može ponovo upotrebiti protiv drugih vendora koji preskaču on-card byte-code verification.

Napadna površina

  1. Remote Application Management (RAM) eSIM profili mogu embed-ovati proizvoljne Java Card applete. Provisioning se vrši standardnim APDU-ima koji se mogu tunelovati kroz SMS-PP (Short Message Service Point-to-Point) ili HTTPS. Ako napadač poseduje (ili ukrade) RAM keys za profil, može INSTALL/LOAD maliciozni applet na daljinu.
  2. Java Card byte-code execution Nakon instalacije, applet se izvršava unutar VM-a. Nedostajuće run-time provere dozvoljavaju memory corruption.

Promene u ekosistemu 2024–2025

  • GSMA TS.48 v7.0 (18 Jun 2025) uklanja javne RAM keyset-ove iz Generic Test Profile i blokira INSTALL osim ako nisu obezbeđeni randomizovani ključevi; keširani v≤6 profili i dalje izlažu statičke RAM keys i ostaju exploitable.
  • GSMA AN‑2025‑07 (09 Jul 2025) preporučuje on-card bytecode verification; većina eUICC-a i dalje preskače punu verifikaciju pa VM memory bug-ovi ostaju dostupni posle instalacije appleta.
  • Kigen OTA hardening (Jul 2025) blokira učitavanje appleta kada su aktivni legacy TS.48 test profili i dodaje runtime provere, ali nepatch-ovani uređaji ostaju vulnerable.

The Type-Confusion Primitive

getfield / putfield bi trebalo da rade samo nad object references. U Kigen eUICC-u instrukcije nikada ne validiraju da li operand na stack-u predstavlja object ili array reference. Pošto array.length word živi na istom offset-u kao i prvo instance polje normalnog objekta, napadač može:

  1. Create a byte-array byte[] buf = new byte[0x100];
  2. Cast it to Object o = (Object)buf;
  3. Koristi putfield da prepiše bilo koju 16-bitnu vrednost unutar susednog objekta (uključujući VTABLE / ptr translation entries).
  4. Koristi getfield da pročita proizvoljnu memoriju kada su internal pointers hijack-ovani.
// 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.

Kraj‑do‑kraja tok eksploatacije

  1. Enumeriši firmware – Koristi nedokumentovani GET DATA item DF1F:
80 CA DF 1F 00   // → "ECu10.13" (vulnerable)
  1. Instaliraj zlonamerni applet OTA – Iskoristi javno poznate ključeve TS.48 Generic Test Profile i pošalji SMS-PP fragmente koji prenose CAP fajl (LOAD) praćen INSTALL:
// simplified APDU chain
80 E6 02 00 <data>   // LOAD (block n)
80 E6 0C 00 <data>   // INSTALL for load
  1. Trigger type-confusion – Kada je applet selektovan on izvršava write-what-where kako bi preuzeo kontrolu nad tabelom pokazivača i leak memorije kroz normalne APDU odgovore.
  2. Ekstrahuj GSMA certificate key – Privatni EC ključ se kopira u RAM appleta i vraća u delovima.
  3. Impersonate the eUICC – Ukradeni par ključeva + sertifikati omogućavaju napadaču da se autentifikuje prema any RSP serveru kao legitimna kartica (EID binding može i dalje biti potreban za neke operatore).
  4. Preuzmi i izmeni profile – Plaintext profili sadrže veoma osetljiva polja kao što su OPc, AMF, OTA keys i čak dodatni appleti. Napadač može:
  • Klonirati profil na drugi eUICC (otimanje glasovnog/SMS saobraćaja);
  • Izmeniti Java Card aplikacije (npr. ubaciti STK spyware) pre ponovnog otpremanja;
  • Ekstrahovati operaterske tajne za široku zloupotrebu.

Demonstracija kloniranja / otimanja

Instalacija istog profila na PHONE A i PHONE B dovodi do toga da Mobile Switching Centre usmerava dolazni saobraćaj ka uređaju koji se poslednji registrovao. Jedna sesija presretanja Gmail 2FA SMS poruka je dovoljna da se zaobiđe MFA za žrtvu.

Automatizovani Test & Exploit Toolkit

Istraživači su objavili interni alat sa komandom bsc (Osnovna provera bezbednosti) koja odmah pokazuje da li je Java Card VM ranjiv:

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]

Moduli koji dolaze uz framework:

  • introspector – potpuni VM i istraživač memorije (~1.7 MB Java)
  • security-test – generički applet za zaobilaženje verifikacije (~150 KB)
  • exploit – 100 % pouzdan kompromit Kigen eUICC (~72 KB)

Mitigacije

  1. Verifikacija bajt-koda na kartici – osigurati potpunu proveru tipova u kontrolnom i podatkovnom toku umesto samo na vrhu steka.
  2. Sakriti header niza – postavite length izvan preklapajućih polja objekata.
  3. Ojačati politiku RAM keys – nikada ne isporučivati profile sa javnim ključevima; onemogućiti INSTALL u test profilima (TS.48 v7 uklanja RAM keysets).
  4. Heuristike na strani RSP servera – ograničiti broj preuzimanja profila po EID-u, pratiti geografske anomalije, proveravati svežinu sertifikata.
  5. Držite uređaje podalje od nasleđenih test profila – primeniti OTA iz jula 2025. koja blokira učitavanje appleta sa TS.48 v≤6 ili ukloniti test profil iz fabričkih slika.

Brzi kontrolni spisak za pentestere

  • Query GET DATA DF1F – vulnerable firmware string ECu10.13 indicates Kigen.
  • Inspect loaded profiles: TS.48 test profiles with static RAM keys (v≤6) are directly exploitable; v7 without RAM keys need a new key leak.
  • 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 – success = full compromise.

References

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks