eSIM / Java Card VM Exploitation
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.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Overview
Τα Embedded SIMs (eSIMs) υλοποιούνται ως Embedded UICC (eUICC) smart-cards που τρέχουν μια Java Card Virtual Machine (JC VM) πάνω σε ένα secure element. Επειδή προφίλ και applets μπορούν να προμηθευτούν over-the-air (OTA) μέσω Remote SIM Provisioning (RSP), οποιοδήποτε σφάλμα ασφάλειας μνήμης μέσα στη JC VM γίνεται αμέσως ένα remote code-execution primitive μέσα στο πιο προνόμιο στοιχείο της συσκευής.
Αυτή η σελίδα περιγράφει μια πραγματική πλήρη παραβίαση του eUICC της Kigen (Infineon SLC37 ESA1M2, ARM SC300) που προκλήθηκε από την έλλειψη ελέγχων type-safety στα bytecodes getfield και putfield. Η ίδια τεχνική μπορεί να εφαρμοστεί και σε άλλους vendors που παραλείπουν την on-card byte-code verification.
Attack Surface
- Remote Application Management (RAM)
Τα eSIM profiles μπορεί να ενσωματώνουν αυθαίρετα Java Card applets. Η προμήθεια γίνεται με standard APDUs που μπορούν να tunneled μέσω SMS-PP (Short Message Service Point-to-Point) ή HTTPS. Αν ένας attacker αποκτήσει (ή κλέψει) τα RAM keys για ένα profile, μπορεί απομακρυσμένα ναINSTALL/LOADένα κακόβουλο applet. - Java Card byte-code execution
Μετά την εγκατάσταση, το applet εκτελείται μέσα στη VM. Η έλλειψη run-time checks επιτρέπει memory corruption.
2024–2025 ecosystem changes
- GSMA TS.48 v7.0 (18 Jun 2025) αφαίρεσε τα public RAM keysets από το Generic Test Profile και μπλοκάρει
INSTALLεκτός αν παρέχονται randomized keys· τα cached v≤6 profiles εξακολουθούν να εκτίθενται με static RAM keys και παραμένουν exploitable. - GSMA AN‑2025‑07 (09 Jul 2025) προτείνει on-card bytecode verification· τα περισσότερα eUICCs ακόμη παραλείπουν πλήρη verification, οπότε τα VM memory bugs παραμένουν προσβάσιμα μετά το install του applet.
- Kigen OTA hardening (Jul 2025) μπλοκάρει το loading applets όταν ενεργά είναι legacy TS.48 test profiles και προσθέτει runtime checks, αλλά οι μη patched συσκευές παραμένουν vulnerable.
The Type-Confusion Primitive
getfield / putfield υποτίθεται ότι λειτουργούν μόνο σε object references. Στο Kigen eUICC οι εντολές δεν επαληθεύουν αν ο operand στην stack είναι αναφορά object ή array. Επειδή μια λέξη array.length βρίσκεται στην ίδια ακριβώς offset με το πρώτο instance field ενός κανονικού object, ένας attacker μπορεί:
- Create a byte-array
byte[] buf = new byte[0x100]; - Cast it to
Object o = (Object)buf; - Use
putfieldto overwrite any 16-bit value inside an adjacent object (including VTABLE / ptr translation entries). - Use
getfieldto read arbitrary memory once internal pointers are hijacked.
// 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 ...
Το primitive παρέχει arbitrary read / write στον χώρο διευθύνσεων του eUICC — αρκετό για να αποθηκεύσει το μοναδικό για τη συσκευή ιδιωτικό κλειδί ECC που πιστοποιεί την κάρτα στο οικοσύστημα GSMA.
Πλήρης ροή εκμετάλλευσης
- Καταγραφή firmware – Χρήση του μη-τεκμηριωμένου
GET DATAitemDF1F:
80 CA DF 1F 00 // → "ECu10.13" (vulnerable)
- Εγκατάσταση κακόβουλου applet OTA – Κατάχρηση των δημόσια γνωστών κλειδιών του TS.48 Generic Test Profile και αποστολή SMS-PP fragments που μεταφέρουν το CAP file (
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 για να καταλάβει έναν pointer table και να leak μνήμη μέσω κανονικών APDU αποκρίσεων.
- Εξαγωγή GSMA certificate key – Το ιδιωτικό EC key αντιγράφεται στο RAM του applet και επιστρέφεται σε κομμάτια.
- Προσποίηση eUICC – Το κλεμμένο key pair + πιστοποιητικά επιτρέπουν στον attacker να authenticate σε any RSP server ως νόμιμη κάρτα (EID binding μπορεί να απαιτηθεί ακόμα για κάποιους operators).
- Κατέβασμα και τροποποίηση profiles – Τα plaintext profiles περιέχουν πολύ ευαίσθητα πεδία όπως
OPc,AMF, OTA keys και ακόμα επιπλέον applets. Ο attacker μπορεί:
- Clone a profile to a second eUICC (voice/SMS hijack);
- Patch Java Card applications (e.g. insert STK spyware) before re-uploading;
- Extract operator secrets for large-scale abuse.
Cloning / Hijacking Demonstration
Η εγκατάσταση του ίδιου profile σε PHONE A και PHONE B έχει ως αποτέλεσμα το Mobile Switching Centre να δρομολογεί την εισερχόμενη κίνηση στη συσκευή που έκανε πιο πρόσφατη registration. Μία συνεδρία Gmail 2FA SMS interception αρκεί για να παρακαμφθεί το MFA του θύματος.
Automated Test & Exploit Toolkit
Οι researchers δημοσίευσαν ένα εσωτερικό εργαλείο με την εντολή bsc (Basic Security Check) που δείχνει άμεσα αν μια 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]
Modules shipped with the framework:
introspector– πλήρης εξερευνητής VM και μνήμης (~1.7 MB Java)security-test– γενικό applet παράκαμψης επαλήθευσης (~150 KB)exploit– 100 % αξιόπιστη παραβίαση Kigen eUICC (~72 KB)
Mitigations
- On-card byte-code verification – επιβάλετε πλήρη παρακολούθηση τύπων control-flow & data-flow αντί μόνο του stack-top.
- Hide array header – τοποθετήστε
lengthέξω από επικαλυπτόμενα object fields. - Harden RAM keys policy – μην διανέμετε προφίλ με public keys· απενεργοποιήστε το
INSTALLσε test profiles (TS.48 v7 αφαιρεί RAM keysets). - RSP server side heuristics – rate-limit λήψεις προφίλ ανά EID, παρακολουθήστε γεωγραφικές ανωμαλίες, επικυρώστε την freshness των πιστοποιητικών.
- Keep devices off legacy test profiles – εφαρμόστε το July 2025 OTA που μπλοκάρει το φόρτωμα applet με TS.48 v≤6 ή αφαιρέστε το test profile από τα factory images.
Quick Checklist for Pentesters
- Query
GET DATA DF1F– vulnerable firmware stringECu10.13υποδεικνύει Kigen. - Inspect loaded profiles: TS.48 test profiles με static RAM keys (v≤6) είναι άμεσα εκμεταλλεύσιμα; 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 – επιτυχία = πλήρης παραβίαση.
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.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


