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)๋Š” ๋ณด์•ˆ ์š”์†Œ ์œ„์—์„œ Java Card Virtual Machine (JC VM)์„ ์‹คํ–‰ํ•˜๋Š” Embedded UICC (eUICC) ์Šค๋งˆํŠธ์นด๋“œ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ•„๊ณผ ์• ํ”Œ๋ฆฟ์ด Remote SIM Provisioning (RSP)์„ ํ†ตํ•ด over-the-air (OTA)๋กœ ํ”„๋กœ๋น„์ €๋‹๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, JC VM ๋‚ด๋ถ€์˜ ์–ด๋–ค ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ ๊ฒฐํ•จ๋„ ์ฆ‰์‹œ ํ•ธ๋“œ์…‹์—์„œ ๊ฐ€์žฅ ๊ถŒํ•œ์ด ๋†’์€ ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ์˜ remote code-execution primitive๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๋Š” getfield ๋ฐ putfield ๋ฐ”์ดํŠธ์ฝ”๋“œ์˜ ํƒ€์ž… ์•ˆ์ „์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด Kigen์˜ eUICC (Infineon SLC37 ESA1M2, ARM SC300)๊ฐ€ ์‹ค์ œ๋กœ ์™„์ „ํžˆ ํƒˆ์ทจ๋œ ์‚ฌ๋ก€๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๊ธฐ๋ฒ•์€ on-card byte-code verification์„ ์ƒ๋žตํ•˜๋Š” ๋‹ค๋ฅธ ๋ฒค๋”์—๋„ ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณต๊ฒฉ ํ‘œ๋ฉด

  1. Remote Application Management (RAM)
    eSIM ํ”„๋กœํ•„์€ ์ž„์˜์˜ Java Card applets๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋น„์ €๋‹์€ ํ‘œ์ค€ APDUs๋กœ ์ˆ˜ํ–‰๋˜๋ฉฐ, ์ด๋Š” SMS-PP (Short Message Service Point-to-Point) ๋˜๋Š” HTTPS๋ฅผ ํ†ตํ•ด ํ„ฐ๋„๋ง๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๊ฐ€ ํ”„๋กœํ•„์˜ RAM keys๋ฅผ ๋ณด์œ (๋˜๋Š” ํƒˆ์ทจ)ํ•˜๋ฉด ์›๊ฒฉ์œผ๋กœ ์•…์„ฑ ์• ํ”Œ๋ฆฟ์„ INSTALL/LOADํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. Java Card byte-code execution
    ์„ค์น˜ ํ›„ ์• ํ”Œ๋ฆฟ์€ VM ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌ ๋ˆ„๋ฝ์€ ๋ฉ”๋ชจ๋ฆฌ ์†์ƒ(memory corruption)์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

2024โ€“2025 ecosystem changes

  • GSMA TS.48 v7.0 (18 Jun 2025) removed public RAM keysets from the Generic Test Profile and blocks INSTALL unless randomized keys are provided; cached vโ‰ค6 profiles still expose static RAM keys and remain exploitable.
  • GSMA ANโ€‘2025โ€‘07 (09 Jul 2025) recommends on-card bytecode verification; most eUICCs still skip full verification so VM memory bugs stay reachable after applet install.
  • Kigen OTA hardening (Jul 2025) blocks applet loading when legacy TS.48 test profiles are active and adds runtime checks, but unpatched devices stay vulnerable.

The Type-Confusion Primitive

getfield / putfield are supposed to operate only on object references. Kigen eUICC์—์„œ๋Š” ํ•ด๋‹น ๋ช…๋ น๋“ค์ด ์Šคํƒ ์ƒ์˜ ์˜คํผ๋žœ๋“œ๊ฐ€ object์ธ์ง€ array์ธ์ง€ ๊ฒ€์ฆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. array.length ์›Œ๋“œ๋Š” ์ผ๋ฐ˜ ๊ฐ์ฒด์˜ ์ฒซ ๋ฒˆ์งธ ์ธ์Šคํ„ด์Šค ํ•„๋“œ์™€ ์ •ํ™•ํžˆ ๊ฐ™์€ ์˜คํ”„์…‹์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ณต๊ฒฉ์ž๋Š” ๋‹ค์Œ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. ๋ฐ”์ดํŠธ ๋ฐฐ์—ด ์ƒ์„ฑ: byte[] buf = new byte[0x100];
  2. ์บ์ŠคํŠธ: Object o = (Object)buf;
  3. putfield๋ฅผ ์‚ฌ์šฉํ•ด ์ธ์ ‘ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ์–ด๋–ค 16๋น„ํŠธ ๊ฐ’์ด๋“  ๋ฎ์–ด์”๋‹ˆ๋‹ค(์—ฌ๊ธฐ์—๋Š” VTABLE / ptr translation entries ํฌํ•จ).
  4. ๋‚ด๋ถ€ ํฌ์ธํ„ฐ๊ฐ€ ํƒˆ์ทจ๋˜๋ฉด getfield๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž„์˜์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฝ์Šต๋‹ˆ๋‹ค.
// 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.

์—”๋“œ ํˆฌ ์—”๋“œ ์ต์Šคํ”Œ๋กœ์ž‡ ์›Œํฌํ”Œ๋กœ์šฐ

  1. ํŽŒ์›จ์–ด ์—ด๊ฑฐ โ€“ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ GET DATA ํ•ญ๋ชฉ DF1F ์‚ฌ์šฉ:
80 CA DF 1F 00   // โ†’ "ECu10.13" (vulnerable)
  1. ์•…์„ฑ applet OTA ์„ค์น˜ โ€“ TS.48 Generic Test Profile์˜ ๊ณต๊ฐœ๋œ ํ‚ค๋ฅผ ์•…์šฉํ•˜๊ณ  CAP ํŒŒ์ผ์„ ์ „์†กํ•˜๋Š” SMS-PP ์กฐ๊ฐ์„ ํ‘ธ์‹œํ•œ ํ›„ INSTALL ์ˆ˜ํ–‰:
// simplified APDU chain
80 E6 02 00 <data>   // LOAD (block n)
80 E6 0C 00 <data>   // INSTALL for load
  1. type-confusion ์œ ๋ฐœ โ€“ applet์ด ์„ ํƒ๋˜๋ฉด write-what-where๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ํฌ์ธํ„ฐ ํ…Œ์ด๋ธ”์„ ํ•˜์ด์žฌํ‚นํ•˜๊ณ  ์ •์ƒ APDU ์‘๋‹ต์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ leakํ•ฉ๋‹ˆ๋‹ค.
  2. GSMA certificate key ์ถ”์ถœ โ€“ Private EC key๋Š” applet์˜ RAM์œผ๋กœ ๋ณต์‚ฌ๋˜์–ด ์ฒญํฌ ๋‹จ์œ„๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
  3. eUICC ๊ฐ€์žฅ โ€“ ํƒˆ์ทจํ•œ ํ‚ค ํŽ˜์–ด์™€ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณต๊ฒฉ์ž๋Š” ์ •๋‹นํ•œ ์นด๋“œ๋กœ์„œ any RSP ์„œ๋ฒ„์— ์ธ์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ผ๋ถ€ ํ†ต์‹ ์‚ฌ์—์„œ๋Š” ์—ฌ์ „ํžˆ EID ๋ฐ”์ธ๋”ฉ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ).
  4. ํ”„๋กœํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์ˆ˜์ • โ€“ ํ‰๋ฌธ ํ”„๋กœํŒŒ์ผ์—๋Š” OPc, AMF, OTA keys ๋ฐ ์ถ”๊ฐ€ applet ๋“ฑ ๋งค์šฐ ๋ฏผ๊ฐํ•œ ํ•„๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
  • ํ”„๋กœํŒŒ์ผ์„ ๋‘ ๋ฒˆ์งธ eUICC๋กœ ๋ณต์ œ(voice/SMS hijack);
  • ์žฌ์—…๋กœ๋“œํ•˜๊ธฐ ์ „์— Java Card ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŒจ์น˜(์˜ˆ: STK spyware ์‚ฝ์ž…);
  • ๋Œ€๊ทœ๋ชจ ์•…์šฉ์„ ์œ„ํ•ด ์šด์˜์ž ๋น„๋ฐ€์„ ์ถ”์ถœ.

Cloning / Hijacking Demonstration

PHONE A์™€ PHONE B์— ๋™์ผํ•œ ํ”„๋กœํŒŒ์ผ์„ ์„ค์น˜ํ•˜๋ฉด Mobile Switching Centre๊ฐ€ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋“ฑ๋ก๋œ ๊ธฐ๊ธฐ๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. Gmail 2FA SMS๋ฅผ ํ•œ ์„ธ์…˜๋งŒ ๊ฐ€๋กœ์ฑ„๋„ ํ”ผํ•ด์ž์˜ MFA๋ฅผ ์šฐํšŒํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ ๋ฐ ์ต์Šคํ”Œ๋กœ์ž‡ ํˆดํ‚ท

์—ฐ๊ตฌ์ž๋“ค์€ bsc (Basic Security Check) ๋ช…๋ น์„ ํฌํ•จํ•œ ๋‚ด๋ถ€ ๋„๊ตฌ๋ฅผ ๊ณต๊ฐœํ–ˆ์œผ๋ฉฐ, ์ด ๋ช…๋ น์€ Java Card VM์ด ์ทจ์•ฝํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ์ฆ‰์‹œ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค:

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)

์™„ํ™” ์กฐ์น˜

  1. ์นด๋“œ ๋‚ด byte-code verification โ€“ stack-top๋งŒ์ด ์•„๋‹ˆ๋ผ ์ „์ฒด control-flow & data-flow type tracking์„ ์ ์šฉํ•˜๋„๋ก ๊ฐ•์ œ.
  2. ๋ฐฐ์—ด ํ—ค๋” ์ˆจ๊ธฐ๊ธฐ โ€“ ๊ฒน์น˜๋Š” ๊ฐ์ฒด ํ•„๋“œ ๋ฐ–์— length๋ฅผ ๋ฐฐ์น˜.
  3. RAM ํ‚ค ์ •์ฑ… ๊ฐ•ํ™” โ€“ ๊ณต๊ฐœ ํ‚ค๊ฐ€ ํฌํ•จ๋œ ํ”„๋กœํŒŒ์ผ์„ ์ ˆ๋Œ€ ์ถœ๊ณ ํ•˜์ง€ ์•Š์Œ; ํ…Œ์ŠคํŠธ ํ”„๋กœํŒŒ์ผ์—์„œ INSTALL ๋น„ํ™œ์„ฑํ™”( TS.48 v7์€ RAM keysets ์ œ๊ฑฐ ).
  4. RSP ์„œ๋ฒ„ ์ธก heuristics โ€“ EID๋ณ„ ํ”„๋กœํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ์†๋„ ์ œํ•œ, ์ง€๋ฆฌ์  ์ด์ƒ ์ง•ํ›„ ๋ชจ๋‹ˆํ„ฐ๋ง, ์ธ์ฆ์„œ ์ตœ์‹ ์„ฑ ๊ฒ€์ฆ.
  5. ์žฅ์น˜๋ฅผ ๋ ˆ๊ฑฐ์‹œ ํ…Œ์ŠคํŠธ ํ”„๋กœํŒŒ์ผ์—์„œ ๋ถ„๋ฆฌ ์œ ์ง€ โ€“ TS.48 vโ‰ค6์œผ๋กœ applet ๋กœ๋”ฉ์„ ์ฐจ๋‹จํ•˜๋Š” 2025๋…„ 7์›” OTA๋ฅผ ์ ์šฉํ•˜๊ฑฐ๋‚˜ ๊ณต์žฅ ์ด๋ฏธ์ง€์—์„œ ํ…Œ์ŠคํŠธ ํ”„๋กœํŒŒ์ผ ์ œ๊ฑฐ.

Pentesters๋ฅผ ์œ„ํ•œ ๋น ๋ฅธ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • Query GET DATA DF1F โ€“ ์ทจ์•ฝํ•œ ํŽŒ์›จ์–ด ๋ฌธ์ž์—ด ECu10.13์€ Kigen์„ ๋‚˜ํƒ€๋ƒ„.
  • ๋กœ๋“œ๋œ ํ”„๋กœํŒŒ์ผ ๊ฒ€์‚ฌ: static RAM keys๊ฐ€ ์žˆ๋Š” TS.48 ํ…Œ์ŠคํŠธ ํ”„๋กœํŒŒ์ผ(vโ‰ค6)์€ ์ง์ ‘์ ์œผ๋กœ ์•…์šฉ ๊ฐ€๋Šฅ; RAM keys๊ฐ€ ์—†๋Š” v7์€ ์ƒˆ๋กœ์šด key leak์ด ํ•„์š”.
  • RAM keys๊ฐ€ ์•Œ๋ ค์ ธ ์žˆ๋Š”์ง€ ํ™•์ธ โ€‘> OTA INSTALL/LOAD ์‹œ๋„.
  • applet ์„ค์น˜ ํ›„, brute-force simple cast primitive (objarrconfusion).
  • Security Domain ๊ฐœ์ธ ํ‚ค๋ฅผ ์ฝ์–ด ์‹œ๋„ โ€“ ์„ฑ๊ณต = full compromise.

References

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 ์ง€์›ํ•˜๊ธฐ