eSIM / Exploitation de la VM Java Card
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
Aperçu
Les SIM intĂ©grĂ©es (eSIM) sont mises en Ćuvre sous forme de UICC intĂ©grĂ©e (eUICC) cartes intelligentes qui exĂ©cutent une Machine Virtuelle Java Card (JC VM) sur un Ă©lĂ©ment sĂ©curisĂ©. Ătant donnĂ© que les profils et les applets peuvent ĂȘtre provisionnĂ©s over-the-air (OTA) via le Provisionnement Ă Distance de SIM (RSP), toute faille de sĂ©curitĂ© mĂ©moire Ă l'intĂ©rieur de la JC VM devient instantanĂ©ment un primitive d'exĂ©cution de code Ă distance Ă l'intĂ©rieur du composant le plus privilĂ©giĂ© de l'appareil.
Cette page décrit un compromis complet dans le monde réel de l'eUICC de Kigen (Infineon SLC37 ESA1M2, ARM SC300) causé par l'absence de vérifications de sécurité de type dans les bytecodes getfield
et putfield
. La mĂȘme technique peut ĂȘtre rĂ©utilisĂ©e contre d'autres fournisseurs qui omettent la vĂ©rification des bytecodes sur la carte.
Surface d'attaque
- Gestion d'Application Ă Distance (RAM)
Les profils eSIM peuvent intĂ©grer des applets Java Card arbitraires. Le provisionnement est effectuĂ© avec des APDUs standard qui peuvent ĂȘtre tunnĂ©lisĂ©s via SMS-PP (Short Message Service Point-to-Point) ou HTTPS. Si un attaquant possĂšde (ou vole) les clĂ©s RAM pour un profil, il peut
INSTALL
/LOAD
une applet malveillante à distance. - Exécution de bytecode Java Card AprÚs l'installation, l'applet s'exécute à l'intérieur de la VM. L'absence de vérifications à l'exécution permet la corruption de la mémoire.
Le Primitive de Confusion de Type
getfield
/ putfield
sont censĂ©s fonctionner uniquement sur des rĂ©fĂ©rences d'objet. Dans l'eUICC de Kigen, les instructions ne valident jamais si l'opĂ©rande sur la pile est une rĂ©fĂ©rence d'objet ou une rĂ©fĂ©rence de tableau. Ătant donnĂ© qu'un mot array.length
se trouve Ă exactement le mĂȘme dĂ©calage que le premier champ d'instance d'un objet normal, un attaquant peut :
- Créer un tableau d'octets
byte[] buf = new byte[0x100];
- Le caster en
Object o = (Object)buf;
- Utiliser
putfield
pour écraser n'importe quelle valeur de 16 bits à l'intérieur d'un objet adjacent (y compris les entrées de traduction VTABLE / ptr). - Utiliser
getfield
pour lire de la mémoire arbitraire une fois que les pointeurs internes sont détournés.
// 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 ...
Le primitive fournit une lecture / Ă©criture arbitraire dans l'espace d'adresses eUICC â suffisant pour extraire la clĂ© privĂ©e ECC unique au dispositif qui authentifie la carte dans l'Ă©cosystĂšme GSMA.
Flux de travail d'exploitation de bout en bout
- ĂnumĂ©rer le firmware â Utiliser l'Ă©lĂ©ment
GET DATA
non documentéDF1F
:
80 CA DF 1F 00 // â "ECu10.13" (vulnĂ©rable)
- Installer un applet malveillant OTA â Abuser des clĂ©s publiquement connues du TS.48 Generic Test Profile et pousser des fragments SMS-PP qui transportent le fichier CAP (
LOAD
) suivi d'unINSTALL
:
// chaßne APDU simplifiée
80 E6 02 00 <data> // LOAD (bloc n)
80 E6 0C 00 <data> // INSTALL pour le chargement
- DĂ©clencher une confusion de type â Lorsque l'applet est sĂ©lectionnĂ©, il effectue l'Ă©criture-quoi-oĂč pour dĂ©tourner une table de pointeurs et divulguer de la mĂ©moire Ă travers des rĂ©ponses APDU normales.
- Extraire la clĂ© de certificat GSMA â La clĂ© EC privĂ©e est copiĂ©e dans la RAM de l'applet et renvoyĂ©e par morceaux.
- Imiter l'eUICC â La paire de clĂ©s volĂ©e + certificats permet Ă l'attaquant de s'authentifier auprĂšs de n'importe quel serveur RSP en tant que carte lĂ©gitime (le lien EID peut encore ĂȘtre requis pour certains opĂ©rateurs).
- TĂ©lĂ©charger et modifier des profils â Les profils en texte clair contiennent des champs hautement sensibles tels que
OPc
,AMF
, clĂ©s OTA et mĂȘme des applets supplĂ©mentaires. L'attaquant peut :
- Cloner un profil sur un second eUICC (détournement de voix/SMS) ;
- Patch les applications Java Card (par exemple, insérer un spyware STK) avant de les re-télécharger ;
- Extraire des secrets d'opérateur pour un abus à grande échelle.
Démonstration de clonage / détournement
Installer le mĂȘme profil sur TĂLĂPHONE A et TĂLĂPHONE B entraĂźne le Centre de commutation mobile Ă router le trafic entrant vers le dispositif qui s'est rĂ©cemment enregistrĂ©. Une session d'interception de SMS 2FA Gmail suffit Ă contourner la MFA pour la victime.
Outil de test et d'exploitation automatisé
Les chercheurs ont publié un outil interne avec une commande bsc
(Basic Security Check) qui montre immédiatement si une VM Java Card est vulnérable :
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 expédiés avec le framework :
introspector
â explorateur complet de VM et de mĂ©moire (~1,7 Mo Java)security-test
â applet de vĂ©rification gĂ©nĂ©rique de contournement (~150 Ko)exploit
â compromis Kigen eUICC 100 % fiable (~72 Ko)
Atténuations
- VĂ©rification du byte-code sur la carte â appliquer un suivi complet du flux de contrĂŽle et du flux de donnĂ©es au lieu de se limiter au sommet de la pile.
- Cacher l'en-tĂȘte du tableau â placer
length
en dehors des champs d'objet qui se chevauchent. - Renforcer la politique des clĂ©s RAM â ne jamais expĂ©dier de profils avec des clĂ©s publiques ; dĂ©sactiver
INSTALL
dans les profils de test (abordĂ© dans GSMA TS.48 v7). - Heuristiques cĂŽtĂ© serveur RSP â limiter le taux de tĂ©lĂ©chargements de profils par EID, surveiller les anomalies gĂ©ographiques, valider la fraĂźcheur des certificats.
Liste de vérification rapide pour les pentesters
- Interroger
GET DATA DF1F
â la chaĂźne de firmware vulnĂ©rableECu10.13
indique Kigen. - VĂ©rifier si les clĂ©s RAM sont connues â> tenter
INSTALL
/LOAD
OTA. - AprĂšs l'installation de l'applet, forcer le brute-force d'un type primitif simple (
objarrconfusion
). - Essayer de lire les clĂ©s privĂ©es du domaine de sĂ©curitĂ© â succĂšs = compromis total.
Références
- Security Explorations â eSIM security
- GSMA TS.48 Generic Test Profile v7.0
- Java Card VM Specification 3.1
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.