eSIM / Java Card VM Exploitation

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें

अवलोकन

Embedded SIMs (eSIMs) को Embedded UICC (eUICC) स्मार्ट-कार्ड के रूप में लागू किया जाता है जो एक secure element के ऊपर Java Card Virtual Machine (JC VM) चलाती है। प्रोफ़ाइल और applets को over-the-air (OTA) के माध्यम से Remote SIM Provisioning (RSP) से provision किया जा सकता है, इसलिए JC VM के अंदर कोई भी memory-safety flaw तुरंत handset के सबसे privileged component के अंदर एक remote code-execution primitive बन जाता है।

यह पृष्ठ Kigen के eUICC (Infineon SLC37 ESA1M2, ARM SC300) के एक वास्तविक दुनिया के पूर्ण समझौते का वर्णन करता है, जो getfield और putfield bytecodes में type-safety चेक्स के अभाव के कारण हुआ था। वही तकनीक उन अन्य विक्रेताओं के खिलाफ भी पुनः उपयोग की जा सकती है जो on-card byte-code verification छोड़ देते हैं।

Attack Surface

  1. Remote Application Management (RAM) eSIM प्रोफाइल्स arbitrary Java Card applets को embed कर सकती हैं। Provisioning standard APDUs के साथ किया जाता है जिन्हें SMS-PP (Short Message Service Point-to-Point) या HTTPS के माध्यम से tunnel किया जा सकता है। यदि कोई attacker किसी प्रोफ़ाइल के RAM keys का मालिक है (या उन्हें चुरा लेता है), तो वे दूर से एक malicious applet को INSTALL/LOAD कर सकते हैं।
  2. Java Card byte-code execution इंस्टॉलेशन के बाद, applet VM के अंदर execute होता है। Missing run-time checks memory corruption की अनुमति देते हैं।

2024–2025 ecosystem changes

  • GSMA TS.48 v7.0 (18 Jun 2025) ने Generic Test Profile से public RAM keysets हटा दिए और INSTALL को ब्लॉक कर दिया जब तक कि randomized keys प्रदान न किए जाएं; cached v≤6 प्रोफ़ाइल्स अभी भी static RAM keys को उजागर करती हैं और exploitable बनी रहती हैं।
  • GSMA AN‑2025‑07 (09 Jul 2025) on-card bytecode verification की सिफारिश करता है; अधिकांश eUICCs अभी भी full verification छोड़ देते हैं इसलिए applet install के बाद VM memory बग्स पहुंच योग्य रहते हैं।
  • Kigen OTA hardening (Jul 2025) legacy TS.48 test profiles सक्रिय होने पर applet loading को ब्लॉक करता है और runtime checks जोड़ता है, लेकिन unpatched devices अभी भी vulnerable रहती हैं।

The Type-Confusion Primitive

getfield / putfield केवल object references पर ही कार्य करने के लिए बनाए गए हैं। Kigen eUICC में ये निर्देश कभी यह सत्यापित नहीं करते कि stack पर operand एक object है या एक array reference है। क्योंकि एक array.length word सामान्य object के पहले instance field के ठीक उसी offset पर स्थित होता है, एक attacker कर सकता है:

  1. एक byte-array बनाएं byte[] buf = new byte[0x100];
  2. इसे कास्ट करें Object o = (Object)buf;
  3. putfield का उपयोग करके किसी भी पास-पड़ोस object के अंदर किसी भी 16-bit मान को overwrite करें (जिसमें VTABLE / ptr translation entries भी शामिल हैं)।
  4. internal pointers hijack होने के बाद getfield का उपयोग करके arbitrary memory पढ़ें।
// 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.

एंड-टू-एंड Exploitation Workflow

  1. Enumerate firmware – Use undocumented GET DATA item DF1F:
80 CA DF 1F 00   // → "ECu10.13" (vulnerable)
  1. Install malicious applet OTA – TS.48 Generic Test Profile की publicly-known keys का दुरुपयोग करके और SMS-PP fragments भेजकर जो CAP file (LOAD) और फिर INSTALL) को transport करते हैं:
// simplified APDU chain
80 E6 02 00 <data>   // LOAD (block n)
80 E6 0C 00 <data>   // INSTALL for load
  1. Trigger type-confusion – जब applet select किया जाता है तो यह write-what-where करता है ताकि एक pointer table को hijack किया जा सके और normal APDU responses के माध्यम से memory को leak किया जा सके।
  2. Extract GSMA certificate key – Private EC key applet की RAM में copy की जाती है और chunks में वापस कर दी जाती है।
  3. Impersonate the eUICC – चोरी किया गया key pair + certificates attacker को any RSP server के रूप में authenticate करने देते हैं जैसे कि वह एक legitimate card हो (कुछ operators के लिए EID binding अभी भी required हो सकती है)।
  4. Download and modify profiles – Plaintext profiles में अत्यंत संवेदनशील फ़ील्ड होते हैं जैसे OPc, AMF, OTA keys और यहाँ तक कि अतिरिक्त applets भी। Attacker निम्न कर सकते हैं:
  • किसी profile को दूसरे eUICC पर clone करना (voice/SMS hijack);
  • Java Card applications को patch करना (उदा. re-upload करने से पहले STK spyware insert करना);
  • बड़े पैमाने पर दुरुपयोग के लिए operator secrets निकालना।

Cloning / Hijacking Demonstration

एक ही profile को PHONE A और PHONE B पर install करने से Mobile Switching Centre incoming traffic को उस device की ओर route करता है जिसने हाल ही में register किया हो। Gmail के एक 2FA SMS interception session से victim के लिए MFA bypass करना संभव हो जाता है।

Automated Test & Exploit Toolkit

Researchers ने एक internal tool जारी किया जिसमें bsc (Basic Security Check) command है जो तुरंत दिखाता है कि क्या Java Card VM vulnerable है:

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]

फ्रेमवर्क के साथ शिप किए गए मॉड्यूल:

  • introspector – पूर्ण VM और मेमोरी एक्सप्लोरर (~1.7 MB Java)
  • security-test – generic verification bypass applet (~150 KB)
  • exploit – 100 % reliable Kigen eUICC compromise (~72 KB)

निवारक उपाय

  1. On-card byte-code verification – स्टैक-टॉप की बजाय पूर्ण control-flow & data-flow टाइप ट्रैकिंग लागू करें।
  2. Hide array header – ओवरलैप होने वाले object fields के बाहर length रखें।
  3. Harden RAM keys policy – सार्वजनिक keys के साथ profiles कभी शिप न करें; test profiles में INSTALL को अक्षम कर दें (TS.48 v7 removes RAM keysets).
  4. RSP server side heuristics – प्रति EID profile downloads को rate-limit करें, भौगोलिक anomalies की निगरानी करें, certificate freshness को validate करें।
  5. Keep devices off legacy test profiles – जुलाई 2025 OTA लागू करें जो applet loading को TS.48 v≤6 के साथ ब्लॉक करे या factory images से test profile हटा दें।

Pentesters के लिए त्वरित चेकलिस्ट

  • Query GET DATA DF1F – vulnerable firmware string ECu10.13 संकेत करता है कि डिवाइस Kigen है।
  • Inspect loaded profiles: TS.48 test profiles with static RAM keys (v≤6) सीधे exploitable हैं; v7 बिना RAM keys के नए 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 – सफलता = full compromise.

संदर्भ

Tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE) Azure हैकिंग सीखें और अभ्यास करें: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks का समर्थन करें