diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ac7efe026..9ab45b360 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -77,6 +77,7 @@ # 🧙‍♂️ Generic Hacking - [Brute Force - CheatSheet](generic-hacking/brute-force.md) +- [Esim Javacard Exploitation](generic-hacking/esim-javacard-exploitation.md) - [Exfiltration](generic-hacking/exfiltration.md) - [Reverse Shells (Linux, Windows, MSFVenom)](generic-hacking/reverse-shells/README.md) - [MSFVenom - CheatSheet](generic-hacking/reverse-shells/msfvenom.md) diff --git a/src/generic-hacking/esim-javacard-exploitation.md b/src/generic-hacking/esim-javacard-exploitation.md new file mode 100644 index 000000000..128387dd5 --- /dev/null +++ b/src/generic-hacking/esim-javacard-exploitation.md @@ -0,0 +1,88 @@ +# eSIM / Java Card VM Eksploatacija + +{{#include ../banners/hacktricks-training.md}} + +## Pregled +Ugrađene SIM kartice (eSIM) se implementiraju kao **Ugrađene UICC (eUICC)** pametne kartice koje pokreću **Java Card Virtual Machine (JC VM)** na vrhu sigurnog elementa. +Zato što se profili i aplikacije mogu obezbediti *preko vazduha* (OTA) putem Daljinskog SIM Obezbeđenja (RSP), svaka greška u bezbednosti memorije unutar JC VM odmah postaje primitivna metoda za izvršavanje koda **unutar najprivilegovanijeg dela uređaja**. + +Ova stranica opisuje stvarno potpuno kompromitovanje Kigen-ove eUICC (Infineon SLC37 ESA1M2, ARM SC300) uzrokovano nedostatkom provere tipa u `getfield` i `putfield` bajtkodovima. Ista tehnika se može ponovo koristiti protiv drugih dobavljača koji izostavljaju verifikaciju bajtkoda na kartici. + +## Površina napada +1. **Upravljanje daljinskim aplikacijama (RAM)** +eSIM profili mogu sadržati proizvoljne Java Card aplikacije. Obezbeđivanje se vrši standardnim APDU-ima koji se mogu tunelovati kroz SMS-PP (Kratka Poruka Servis Tačka do Tačke) ili HTTPS. Ako napadač poseduje (ili ukrade) **RAM ključeve** za profil, može `INSTALL`/`LOAD` zloćudnu aplikaciju na daljinu. +2. **Izvršavanje bajtkoda Java Card** +Nakon instalacije, aplikacija se izvršava unutar VM. Nedostatak provere u vreme izvršavanja omogućava korupciju memorije. + +## Primitiv tipa-zbunjenosti +`getfield` / `putfield` bi trebali da rade samo na **referencama objekata**. U Kigen eUICC instrukcije nikada ne proveravaju da li je operand na steku *objekat* ili *referenca niza*. Pošto reč `array.length` živi na tačno istom offsetu kao prva instanca polja normalnog objekta, napadač može: + +1. Kreirati bajt-niz `byte[] buf = new byte[0x100];` +2. Pretvoriti ga u `Object o = (Object)buf;` +3. Koristiti `putfield` da prepiše *bilo koju* 16-bitnu vrednost unutar susednog objekta (uključujući VTABLE / ptr prevodne unose). +4. Koristiti `getfield` da pročita *proizvoljnu* memoriju kada su unutrašnji pokazivači preuzeti. +```java +// Pseudo-bytecode sequence executed by the malicious applet +// buf = newarray byte 0x100 +// o = (Object) buf // illegal but not verified +// putfield , 0xCAFE // arbitrary write +// ... set up read-what-where gadgets ... +``` +Primitive pruža **arbitrarno čitanje / pisanje** u eUICC adresnom prostoru – dovoljno da se isprazni jedinstveni ECC privatni ključ uređaja koji autentifikuje karticu u GSMA ekosistemu. + +## End-to-End Eksploatacija Radni Tok +1. **Enumeracija firmvera** – Koristite nedokumentovani `GET DATA` stavku `DF1F`: +``` +80 CA DF 1F 00 // → "ECu10.13" (ranjiv) +``` +2. **Instalirajte zloćudni applet OTA** – Iskoristite javno poznate ključeve TS.48 Generic Test Profile i pošaljite SMS-PP fragmente koji transportuju CAP datoteku (`LOAD`) praćenu `INSTALL`: +``` +// pojednostavljena APDU lanac +80 E6 02 00 // LOAD (blok n) +80 E6 0C 00 // INSTALL za učitavanje +``` +3. **Pokrenite konfuziju tipa** – Kada se applet odabere, izvršava write-what-where da preuzme tabelu pokazivača i iscuri memoriju kroz normalne APDU odgovore. +4. **Izvucite GSMA sertifikat ključ** – Privatni EC ključ se kopira u RAM appleta i vraća u delovima. +5. **Imitacija eUICC** – Uk stolen ključni par + sertifikati omogućavaju napadaču da se autentifikuje na *bilo koji* RSP server kao legitimna kartica (EID vezivanje može biti još uvek potrebno za neke operatore). +6. **Preuzmite i modifikujte profile** – Plaintext profili sadrže veoma osetljive podatke kao što su `OPc`, `AMF`, OTA ključevi i čak dodatni appleti. Napadač može: +* Klonirati profil na drugi eUICC (otmica glasa/SMS); +* Patchovati Java Card aplikacije (npr. umetnuti STK špijunski softver) pre ponovnog učitavanja; +* Izvući tajne operatera za masovnu zloupotrebu. + +## Kloniranje / Otmica Demonstracija +Instaliranje istog profila na **PHONE A** i **PHONE B** rezultira time da Mobilni Preklopni Centar usmerava dolazni saobraćaj na uređaj koji se najrecentnije registrovao. Jedna sesija presretanja Gmail 2FA SMS-a je dovoljna da se zaobiđe MFA za žrtvu. + +## Automatizovani Test & Eksploatacioni Alat +Istraživači su objavili interni alat sa `bsc` (*Osnovna Provera Bezbednosti*) komandom koja odmah pokazuje da li je Java Card VM ranjiv: +``` +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] +``` +Moduli isporučeni sa okvirom: +* `introspector` – pun VM i istraživač memorije (~1.7 MB Java) +* `security-test` – generički verifikacioni zaobilaženje applet (~150 KB) +* `exploit` – 100 % pouzdana Kigen eUICC kompromitacija (~72 KB) + +## Mogućnosti ublažavanja +1. **Verifikacija bajt-koda na kartici** – primeniti potpunu kontrolu toka i praćenje tipa podataka umesto samo na vrhu steka. +2. **Sakrijte zaglavlje niza** – stavite `length` van preklapajućih polja objekta. +3. **Ojačajte politiku RAM ključeva** – nikada ne isporučujte profile sa javnim ključevima; onemogućite `INSTALL` u test profilima (obrađeno u GSMA TS.48 v7). +4. **Heuristike RSP servera** – ograničite brzinu preuzimanja profila po EID, pratite geografske anomalije, validirajte svežinu sertifikata. + +## Brza lista za pentestere +* Upit `GET DATA DF1F` – ranjiva firmware string `ECu10.13` ukazuje na Kigen. +* Proverite da li su RAM ključevi poznati ‑> pokušajte OTA `INSTALL`/`LOAD`. +* Nakon instalacije appleta, brute-force jednostavnu cast primitivu (`objarrconfusion`). +* Pokušajte da pročitate privatne ključeve sigurnosnog domena – uspeh = potpuna kompromitacija. + +## Reference +- [Security Explorations – eSIM security](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 Specification 3.1](https://docs.oracle.com/en/java/javacard/3.1/jc-vm-spec/F12650_05.pdf) + +{{#include ../banners/hacktricks-training.md}}