eSIM / Java Card VM Exploitation
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Oorsig
Embedded SIMs (eSIMs) word geïmplementeer as Embedded UICC (eUICC) smart-kaarte wat ’n Java Card Virtual Machine (JC VM) bo-op ’n veilige element uitvoer. Omdat profiles en applets over-the-air (OTA) via Remote SIM Provisioning (RSP) geprovisioneer kan word, word enige memory-safety fout binne die JC VM onmiddellik ’n remote code-execution primitive binne die mees beveligde komponent van die handtoestel.
Hierdie bladsy beskryf ’n real-world volle kompromie van Kigen’s eUICC (Infineon SLC37 ESA1M2, ARM SC300) veroorsaak deur ontbrekende type-safety kontrole in die getfield en putfield bytecodes. Dieselfde tegniek kan hergebruik word teen ander verskaffers wat on-card byte-code verification weglate.
Aanvaloppervlak
- Remote Application Management (RAM)
eSIM profiles kan arbitrary Java Card applets inbette. Provisioning word uitgevoer met standaard APDUs wat deur SMS-PP (Short Message Service Point-to-Point) of HTTPS getunnel kan word. As ’n aanvaller die RAM keys vir ’n profiel besit (of steel), kan hulle ’n kwaadwillige applet op afstand
INSTALL/LOAD. - Java Card byte-code execution Na installasie voer die applet binne die VM uit. Ontbrekende run-time kontroles laat memory corruption toe.
2024–2025 ekosisteemveranderinge
- GSMA TS.48 v7.0 (18 Jun 2025) het publieke RAM keysets uit die Generic Test Profile verwyder en blokkeer
INSTALLtensy gerandomiseerde sleutels verskaf word; gecachte v≤6 profiles blootstel steeds statiese RAM keys en bly eksploiteerbaar. - GSMA AN‑2025‑07 (09 Jul 2025) beveel on-card bytecode verification aan; meeste eUICCs slaan steeds volledige verifikasie oor sodat VM memory bugs na applet installasie bereikbaar bly.
- Kigen OTA hardening (Jul 2025) blokkeer applet loading wanneer legacy TS.48 test profiles aktief is en voeg runtime checks by, maar ongepatchte toestelle bly kwesbaar.
Die Type-Confusion Primitive
getfield / putfield is veronderstel om slegs op object references te opereer. In Kigen eUICC valideer die instruksies nooit of die operand op die stack ’n object of ’n array verwysing is nie. Omdat ’n array.length woord op presies dieselfde offset leef as die eerste instance field van ’n normale object, kan ’n aanvaller:
- Skep ’n byte-array
byte[] buf = new byte[0x100]; - Giet dit na
Object o = (Object)buf; - Gebruik
putfieldom enige 16-bit waarde binne ’n aangrensende object oor te skryf (insluitend VTABLE / ptr translation entries). - Gebruik
getfieldom arbitrary memory te lees sodra interne pointere gekaap is.
// 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 ...
Die primitiw bied arbitrary read / write in die eUICC adresruimte – genoeg om die toestel-unieke ECC private sleutel wat die kaart aan die GSMA ekosisteem autentiseer, te dump.
End-to-End Uitbuitingswerkvloei
- Enumereer firmware – Gebruik die ongedokumenteerde
GET DATAitemDF1F:
80 CA DF 1F 00 // → "ECu10.13" (vulnerable)
- Install malicious applet OTA – Misbruik publiek-bekende sleutels van die TS.48 Generic Test Profile en stuur SMS-PP fragmente wat die CAP file (
LOAD) vervoer, gevolg deurINSTALL:
// simplified APDU chain
80 E6 02 00 <data> // LOAD (block n)
80 E6 0C 00 <data> // INSTALL for load
- Trigger type-confusion – Wanneer die applet geselekteer word voer dit die write-what-where uit om ’n pointer table te kap en memory te leak deur normale APDU-antwoorde.
- Trek GSMA certificate key uit – Die private EC-sleutel word na die applet se RAM gekopieer en in stukke teruggegee.
- Imiteer die eUICC – Die gesteelde sleutelpaar + sertifikate laat die aanvaller toe om by enige RSP-server as ’n geldige kaart te autentiseer (EID binding mag steeds vereis word vir sommige operateurs).
- Laai en wysig profiele af – Platte-tekst profiele bevat uiters sensitiewe velde soos
OPc,AMF, OTA-sleutels en selfs addisionele applets. Die aanvaller kan:
- Kloon ’n profiel na ’n tweede eUICC (voice/SMS kaping);
- Patch Java Card-toepassings (bv. voeg STK spyware in) voordat dit weer opgelaai word;
- Trek operateurgeheime uit vir grootskaalse misbruik.
Klooning / Kapingsdemonstrasie
Die installering van dieselfde profiel op PHONE A en PHONE B lei daartoe dat die Mobile Switching Centre inkomende verkeer deurstuur na watter toestel ook al die mees onlangse registrasie gehad het. Een sessie van Gmail 2FA SMS-interseptasie is genoeg om MFA vir die slagoffer te omseil.
Outomatiese Toets- en Exploit-gereedskap
Die navorsers het ’n interne instrument vrygestel met ’n bsc (Basic Security Check) opdrag wat onmiddellik toon of ’n Java Card VM kwesbaar is:
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– full VM and memory explorer (~1.7 MB Java)security-test– generic verification bypass applet (~150 KB)exploit– 100 % reliable Kigen eUICC compromise (~72 KB)
Mitigerings
- On-card byte-code verification – handhaaf volledige control-flow- en data-flow tipe-opsporing in plaas van slegs stack-top.
- Hide array header – plaas
lengthbuite oorvleuelende objekvelde. - Harden RAM keys policy – stuur nooit profiles met public keys nie; deaktiveer
INSTALLin test profiles (TS.48 v7 verwyder RAM keysets). - RSP server side heuristics – rate-limit profile downloads per EID, monitor geografiese anomalieë, valideer sertifikaat se varsheid.
- Keep devices off legacy test profiles – pas die July 2025 OTA toe wat applet loading blokkeer met TS.48 v≤6 of verwyder die test profile uit factory images.
Vinnige kontrolelys vir Pentesters
- Query
GET DATA DF1F– kwetsbare firmware stringECu10.13dui op 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
- Security Explorations – eSIM security
- GSMA TS.48 Generic Test Profile v7.0
- GSMA AN-2025-07 Preventing misuse of an eUICC Profile
- The Hacker News – eSIM vulnerability in Kigen eUICC (July 2025)
- Java Card VM Specification 3.1
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.


