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

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

  1. 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.
  2. 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 :

  1. Créer un tableau d'octets byte[] buf = new byte[0x100];
  2. Le caster en Object o = (Object)buf;
  3. 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).
  4. Utiliser getfield pour lire de la mémoire arbitraire une fois que les pointeurs internes sont détournés.
java
// 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

  1. ÉnumĂ©rer le firmware – Utiliser l'Ă©lĂ©ment GET DATA non documentĂ© DF1F :
80 CA DF 1F 00   // → "ECu10.13" (vulnĂ©rable)
  1. 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'un INSTALL :
// chaßne APDU simplifiée
80 E6 02 00 <data>   // LOAD (bloc n)
80 E6 0C 00 <data>   // INSTALL pour le chargement
  1. 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.
  2. 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.
  3. 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).
  4. 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

  1. 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.
  2. Cacher l'en-tĂȘte du tableau – placer length en dehors des champs d'objet qui se chevauchent.
  3. 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).
  4. 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Ă©rable ECu10.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

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