eSIM / Java Card VM Експлуатація
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Огляд
Embedded SIMs (eSIMs) реалізовані як Embedded UICC (eUICC) смарт-картки, що запускають Java Card Virtual Machine (JC VM) поверх secure element. Оскільки профілі та аплети можуть постачатися over-the-air (OTA) через Remote SIM Provisioning (RSP), будь-яка помилка безпеки пам’яті всередині JC VM миттєво перетворюється на примітив віддаленого виконання коду всередині найбільш привілейованого компонента мобільного пристрою.
Ця сторінка описує реальний повний компроміс eUICC від Kigen (Infineon SLC37 ESA1M2, ARM SC300), спричинений відсутністю перевірок типобезпечності в байткодах getfield та putfield. Ту саму техніку можна повторно використати проти інших постачальників, які пропускають верифікацію байт-коду на карті.
Поверхня атаки
- Remote Application Management (RAM)
eSIM профілі можуть вбудовувати довільні Java Card аплети. Постачання виконується стандартними APDUs, які можна тунелювати через SMS-PP (Short Message Service Point-to-Point) або HTTPS. Якщо атакуючий володіє (або викраде) RAM keys для профілю, він може віддалено виконати
INSTALL/LOADшкідливого аплета. - Java Card byte-code execution Після інсталяції аплет виконується всередині VM. Відсутні runtime-перевірки дозволяють корупцію пам’яті.
2024–2025 зміни в екосистемі
- GSMA TS.48 v7.0 (18 Jun 2025) видалив публічні набори RAM keys з Generic Test Profile і блокує
INSTALL, якщо не вказані рандомізовані ключі; кешовані профілі v≤6 все ще розкривають статичні RAM keys і залишаються експлуатованими. - GSMA AN‑2025‑07 (09 Jul 2025) рекомендує верифікацію байткоду на карті; більшість eUICCs і досі пропускають повну верифікацію, тому баги пам’яті VM залишаються доступними після встановлення аплета.
- Kigen OTA hardening (Jul 2025) блокує завантаження аплетів, коли активні legacy TS.48 тестові профілі, і додає runtime-перевірки, але непатчені пристрої залишаються вразливими.
Примітив type-confusion
getfield / putfield мають працювати лише з object references. В Kigen eUICC інструкції ніколи не перевіряють, чи операнд на стеку є object, чи array reference. Оскільки слово array.length живе в тому ж самому офсеті, що й перше інстансне поле звичайного об’єкта, атакуючий може:
- Створити масив байтів
byte[] buf = new byte[0x100]; - Привести його до
Object:Object o = (Object)buf; - Використати
putfield, щоб перезаписати будь-яке 16-бітне значення всередині сусіднього об’єкта (включно з VTABLE / ptr translation entries). - Використати
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.
Повний цикл експлуатації
- Перевірити прошивку – Використайте недокументований елемент
GET DATADF1F:
80 CA DF 1F 00 // → "ECu10.13" (vulnerable)
- Встановити злоякісний applet OTA – Зловживати загальновідомими ключами TS.48 Generic Test Profile і відправити фрагменти SMS-PP, які транспортують CAP файл (
LOAD) з подальшимINSTALL:
// simplified APDU chain
80 E6 02 00 <data> // LOAD (block n)
80 E6 0C 00 <data> // INSTALL for load
- Trigger type-confusion – Коли applet обраний, він виконує write-what-where, щоб захопити таблицю вказівників і leak пам’ять через звичайні APDU-відповіді.
- Extract GSMA certificate key – Приватний EC ключ копіюється в RAM аплету і повертається частинами.
- Impersonate the eUICC – Вкрадена пара ключів + сертифікати дозволяють атакуючому аутентифікуватися на any RSP сервері як легітимна картка (EID binding може все ще вимагатися для деяких операторів).
- Download and modify profiles – Профілі у відкритому тексті містять дуже чутливі поля, такі як
OPc,AMF, OTA keys та навіть додаткові applet-и. Атакуючий може:
- Клонувати профіль на другий eUICC (перехоплення voice/SMS);
- Патчити Java Card applications (наприклад, вставити STK spyware) перед повторним завантаженням;
- Дістати секрети оператора для масштабного зловживання.
Демонстрація клонування / перехоплення
Встановлення того ж профілю на 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]
Модулі, що постачаються з фреймворком:
introspector– повний переглядач VM і пам’яті (~1.7 MB Java)security-test– загальний аплет для перевірки обходу верифікацій (~150 KB)exploit– 100 % надійний compromise Kigen eUICC (~72 KB)
Пом’якшення (Mitigations)
- On-card byte-code verification – застосувати повний контроль потоку виконання та відстеження типів даних замість перевірки лише верхівки стеку.
- Hide array header – розміщувати
lengthпоза перекриваючимися полями об’єктів. - Harden RAM keys policy – ніколи не постачати профілі з public keys у RAM; вимкнути
INSTALLу тестових профілях (TS.48 v7 видаляє RAM keysets). - RSP server side heuristics – обмежувати швидкість завантаження профілів за EID, контролювати географічні аномалії, перевіряти актуальність сертифікатів.
- Keep devices off legacy test profiles – застосувати OTA липня 2025, яка блокує завантаження аплетів на TS.48 v≤6, або видалити тестовий профіль з образів заводського ПЗ.
Quick Checklist for Pentesters
- Запитати
GET DATA DF1F– вразлива рядок прошивкиECu10.13вказує на Kigen. - Інспектувати завантажені профілі: TS.48 test profiles зі статичними RAM keys (v≤6) прямо експлуатуються; v7 без RAM keys потребує нового key leak.
- Перевірити, чи RAM keys відомі ‑> спробувати OTA
INSTALL/LOAD. - Після встановлення аплета brute-force просту операцію приведення типів (
objarrconfusion). - Спробувати прочитати приватні ключі Security Domain – успіх = повний 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
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


