mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/generic-hacking/esim-javacard-exploitation.md'] to de
This commit is contained in:
		
							parent
							
								
									a2e21f5e25
								
							
						
					
					
						commit
						0b85e987a0
					
				@ -77,6 +77,7 @@
 | 
				
			|||||||
# 🧙♂️ Generic Hacking
 | 
					# 🧙♂️ Generic Hacking
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- [Brute Force - CheatSheet](generic-hacking/brute-force.md)
 | 
					- [Brute Force - CheatSheet](generic-hacking/brute-force.md)
 | 
				
			||||||
 | 
					- [Esim Javacard Exploitation](generic-hacking/esim-javacard-exploitation.md)
 | 
				
			||||||
- [Exfiltration](generic-hacking/exfiltration.md)
 | 
					- [Exfiltration](generic-hacking/exfiltration.md)
 | 
				
			||||||
- [Reverse Shells (Linux, Windows, MSFVenom)](generic-hacking/reverse-shells/README.md)
 | 
					- [Reverse Shells (Linux, Windows, MSFVenom)](generic-hacking/reverse-shells/README.md)
 | 
				
			||||||
  - [MSFVenom - CheatSheet](generic-hacking/reverse-shells/msfvenom.md)
 | 
					  - [MSFVenom - CheatSheet](generic-hacking/reverse-shells/msfvenom.md)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										87
									
								
								src/generic-hacking/esim-javacard-exploitation.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								src/generic-hacking/esim-javacard-exploitation.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,87 @@
 | 
				
			|||||||
 | 
					# eSIM / Java Card VM Exploitation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{#include ../banners/hacktricks-training.md}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Übersicht
 | 
				
			||||||
 | 
					Embedded SIMs (eSIMs) werden als **Embedded UICC (eUICC)** Smartcards implementiert, die eine **Java Card Virtual Machine (JC VM)** auf einem sicheren Element ausführen. Da Profile und Applets *over-the-air* (OTA) über Remote SIM Provisioning (RSP) bereitgestellt werden können, wird jeder Speicherfehler innerhalb der JC VM sofort zu einem Remote-Code-Ausführungsprimitive **innerhalb der privilegiertesten Komponente des Geräts**.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Diese Seite beschreibt einen realen vollständigen Kompromiss von Kigens eUICC (Infineon SLC37 ESA1M2, ARM SC300), verursacht durch fehlende Typ-Sicherheitsprüfungen in den `getfield` und `putfield` Bytecodes. Die gleiche Technik kann gegen andere Anbieter wiederverwendet werden, die die Überprüfung des Bytecodes auf der Karte weglassen.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Angriffsfläche
 | 
				
			||||||
 | 
					1. **Remote Application Management (RAM)**
 | 
				
			||||||
 | 
					eSIM-Profile können beliebige Java Card Applets einbetten. Die Bereitstellung erfolgt mit standardmäßigen APDUs, die über SMS-PP (Short Message Service Point-to-Point) oder HTTPS tunneln können. Wenn ein Angreifer die **RAM-Schlüssel** für ein Profil besitzt (oder stiehlt), kann er ein bösartiges Applet remote `INSTALL`/`LOAD`en.
 | 
				
			||||||
 | 
					2. **Java Card Bytecode-Ausführung**
 | 
				
			||||||
 | 
					Nach der Installation wird das Applet innerhalb der VM ausgeführt. Fehlende Laufzeitprüfungen ermöglichen Speicherbeschädigungen.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Der Typ-Verwirrungsprimitive
 | 
				
			||||||
 | 
					`getfield` / `putfield` sollen nur auf **Objektverweisen** arbeiten. In Kigen eUICC validieren die Anweisungen niemals, ob der Operand auf dem Stack ein *Objekt* oder ein *Array*-Verweis ist. Da ein `array.length` Wort an genau demselben Offset wie das erste Instanzfeld eines normalen Objekts liegt, kann ein Angreifer:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1. Ein Byte-Array erstellen `byte[] buf = new byte[0x100];`
 | 
				
			||||||
 | 
					2. Es in `Object o = (Object)buf;` umwandeln.
 | 
				
			||||||
 | 
					3. `putfield` verwenden, um *irgendeinen* 16-Bit-Wert innerhalb eines benachbarten Objekts (einschließlich VTABLE / ptr Übersetzungseinträge) zu überschreiben.
 | 
				
			||||||
 | 
					4. `getfield` verwenden, um *willkürlichen* Speicher zu lesen, sobald interne Zeiger übernommen wurden.
 | 
				
			||||||
 | 
					```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 ...
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					Die Primitive bietet **willkürlichen Lese-/Schreibzugriff** im eUICC-Adressraum – genug, um den gerätespezifischen ECC-Privatschlüssel zu dumpen, der die Karte im GSMA-Ökosystem authentifiziert.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## End-to-End-Ausbeutungsworkflow
 | 
				
			||||||
 | 
					1. **Firmware auflisten** – Verwenden Sie den nicht dokumentierten `GET DATA`-Eintrag `DF1F`:
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					80 CA DF 1F 00   // → "ECu10.13" (anfällig)
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					2. **Bösartiges Applet OTA installieren** – Missbrauch von öffentlich bekannten Schlüsseln des TS.48 Generic Test Profile und Push von SMS-PP-Fragmenten, die die CAP-Datei (`LOAD`) transportieren, gefolgt von einem `INSTALL`:
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					// vereinfachte APDU-Kette
 | 
				
			||||||
 | 
					80 E6 02 00 <data>   // LOAD (Block n)
 | 
				
			||||||
 | 
					80 E6 0C 00 <data>   // INSTALL für Load
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					3. **Typverwirrung auslösen** – Wenn das Applet ausgewählt wird, führt es den Write-What-Where aus, um eine Zeigertabelle zu übernehmen und Speicher durch normale APDU-Antworten zu leaken.
 | 
				
			||||||
 | 
					4. **GSMA-Zertifikatschlüssel extrahieren** – Der private EC-Schlüssel wird in den RAM des Applets kopiert und in Stücken zurückgegeben.
 | 
				
			||||||
 | 
					5. **Das eUICC impersonifizieren** – Das gestohlene Schlüsselpaar + Zertifikate ermöglichen es dem Angreifer, sich als legitime Karte bei *irgendeinem* RSP-Server zu authentifizieren (EID-Bindung kann für einige Betreiber weiterhin erforderlich sein).
 | 
				
			||||||
 | 
					6. **Profile herunterladen und modifizieren** – Klartextprofile enthalten hochsensible Felder wie `OPc`, `AMF`, OTA-Schlüssel und sogar zusätzliche Applets. Der Angreifer kann:
 | 
				
			||||||
 | 
					* Ein Profil auf ein zweites eUICC klonen (Voice/SMS-Hijack);
 | 
				
			||||||
 | 
					* Java Card-Anwendungen patchen (z. B. STK-Spyware einfügen), bevor sie erneut hochgeladen werden;
 | 
				
			||||||
 | 
					* Betreibergeheimnisse für großflächigen Missbrauch extrahieren.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Klon- / Hijacking-Demonstration
 | 
				
			||||||
 | 
					Die Installation desselben Profils auf **PHONE A** und **PHONE B** führt dazu, dass das Mobile Switching Centre den eingehenden Verkehr an das Gerät weiterleitet, das sich zuletzt registriert hat. Eine Sitzung der Gmail 2FA-SMS-Abfangung reicht aus, um MFA für das Opfer zu umgehen.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Automatisiertes Test- und Exploit-Toolkit
 | 
				
			||||||
 | 
					Die Forscher veröffentlichten ein internes Tool mit einem `bsc` (*Basic Security Check*)-Befehl, der sofort zeigt, ob eine Java Card VM anfällig ist:
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					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]
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					Module, die mit dem Framework geliefert werden:
 | 
				
			||||||
 | 
					* `introspector` – vollständiger VM- und Speicherscanner (~1,7 MB Java)
 | 
				
			||||||
 | 
					* `security-test` – generische Verifizierungs-Bypass-Applet (~150 KB)
 | 
				
			||||||
 | 
					* `exploit`       – 100 % zuverlässiger Kigen eUICC-Kompromiss (~72 KB)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Minderung
 | 
				
			||||||
 | 
					1. **On-Card-Bytecode-Verifizierung** – vollständige Kontrolle über den Kontrollfluss & Datenfluss-Tracking durchsetzen, anstatt nur den Stack-Top.
 | 
				
			||||||
 | 
					2. **Array-Header verbergen** – `length` außerhalb von überlappenden Objektfeldern platzieren.
 | 
				
			||||||
 | 
					3. **RAM-Schlüsselrichtlinie härten** – niemals Profile mit öffentlichen Schlüsseln ausliefern; `INSTALL` in Testprofilen deaktivieren (behandelt in GSMA TS.48 v7).
 | 
				
			||||||
 | 
					4. **RSP-Server-seitige Heuristiken** – Download von Profilen pro EID drosseln, geografische Anomalien überwachen, Frische der Zertifikate validieren.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Schnelle Checkliste für Pentester
 | 
				
			||||||
 | 
					* Abfrage `GET DATA DF1F` – verwundbare Firmware-Zeichenfolge `ECu10.13` weist auf Kigen hin.
 | 
				
			||||||
 | 
					* Überprüfen, ob RAM-Schlüssel bekannt sind ‑> OTA `INSTALL`/`LOAD` versuchen.
 | 
				
			||||||
 | 
					* Nach der Installation des Applets einfache Cast-Primitiven brute-forcen (`objarrconfusion`).
 | 
				
			||||||
 | 
					* Versuchen, private Schlüssel des Sicherheitsbereichs zu lesen – Erfolg = vollständiger Kompromiss.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Referenzen
 | 
				
			||||||
 | 
					- [Security Explorations – eSIM-Sicherheit](https://security-explorations.com/esim-security.html)
 | 
				
			||||||
 | 
					- [GSMA TS.48 Generic Test Profile v7.0](https://www.gsma.com/get-involved/working-groups/gsma_resources/ts-48-v7-0-generic-euicc-test-profile-for-device-testing/)
 | 
				
			||||||
 | 
					- [Java Card VM-Spezifikation 3.1](https://docs.oracle.com/en/java/javacard/3.1/jc-vm-spec/F12650_05.pdf)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{#include ../banners/hacktricks-training.md}}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user