macOS Electron Applications Injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ako ne znate šta je Electron, možete pronaći puno informacija ovde. Ali za sada, samo znajte da Electron pokreće node. I node ima neke parametre i env varijable koje se mogu koristiti da izvrše drugi kod osim naznačenog fajla.
Ove tehnike će biti razmatrane u nastavku, ali u poslednje vreme Electron je dodao nekoliko bezbednosnih zastavica da ih spreči. Ovo su Electron Fuses i ovo su one koje se koriste da spreče Electron aplikacije na macOS-u da učitavaju proizvoljni kod:
RunAsNode
: Ako je onemogućen, sprečava korišćenje env varijable ELECTRON_RUN_AS_NODE
za injekciju koda.
EnableNodeCliInspectArguments
: Ako je onemogućen, parametri kao što su --inspect
, --inspect-brk
neće biti poštovani. Izbegavajući ovaj način za injekciju koda.
EnableEmbeddedAsarIntegrityValidation
: Ako je omogućen, učitani asar
fajl će biti validiran od strane macOS-a. Sprečavajući na ovaj način injekciju koda modifikovanjem sadržaja ovog fajla.
OnlyLoadAppFromAsar
: Ako je ovo omogućeno, umesto da traži učitavanje u sledećem redosledu: app.asar
, app
i konačno default_app.asar
. Proveravaće samo i koristiti app.asar, čime se osigurava da kada se kombinuje sa embeddedAsarIntegrityValidation
fuzom, postaje nemoguće učitati nevalidirani kod.
LoadBrowserProcessSpecificV8Snapshot
: Ako je omogućen, proces pretraživača koristi fajl pod nazivom browser_v8_context_snapshot.bin
za svoj V8 snapshot.
Još jedna zanimljiva fuzija koja neće sprečiti injekciju koda je:
EnableCookieEncryption: Ako je omogućen, skladište kolačića na disku je enkriptovano koristeći kriptografske ključeve na nivou operativnog sistema.
Možete proveriti ove zastavice iz aplikacije sa:
As the docs mention, konfiguracija Electron Fuses je podešena unutar Electron binarnog fajla koji negde sadrži string dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX
.
U macOS aplikacijama ovo je obično u application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework
Možete učitati ovu datoteku u https://hexed.it/ i pretražiti prethodni niz. Nakon ovog niza možete videti u ASCII brojeve "0" ili "1" koji označavaju da li je svaki osigurač onemogućen ili omogućen. Samo modifikujte heksadecimalni kod (0x30
je 0
i 0x31
je 1
) da modifikujete vrednosti osigurača.
Imajte na umu da ako pokušate da prepišete Electron Framework
binarnu datoteku unutar aplikacije sa ovim izmenjenim bajtovima, aplikacija neće raditi.
Mogu postojati spoljni JS/HTML fajlovi koje koristi Electron aplikacija, tako da napadač može ubrizgati kod u ove fajlove čija se potpisivanje neće proveravati i izvršiti proizvoljan kod u kontekstu aplikacije.
Međutim, u ovom trenutku postoje 2 ograničenja:
Dozvola kTCCServiceSystemPolicyAppBundles
je potrebna za modifikaciju aplikacije, tako da to po defaultu više nije moguće.
Kompajlirana asap
datoteka obično ima osigurače embeddedAsarIntegrityValidation
i
onlyLoadAppFromAsar
omogućene
Što čini ovaj put napada složenijim (ili nemogućim).
Imajte na umu da je moguće zaobići zahtev za kTCCServiceSystemPolicyAppBundles
kopiranjem aplikacije u drugi direktorijum (kao što je /tmp
), preimenovanjem foldera app.app/Contents
u app.app/NotCon
, modifikovanjem asar datoteke sa vašim zloćudnim kodom, preimenovanjem nazad u app.app/Contents
i izvršavanjem.
Možete raspakovati kod iz asar datoteke sa:
I spakujte ga nazad nakon što ste ga izmenili sa:
ELECTRON_RUN_AS_NODE
Prema dokumentaciji, ako je ova env varijabla postavljena, pokrenuće proces kao normalan Node.js proces.
Ako je osigurač RunAsNode
onemogućen, env varijabla ELECTRON_RUN_AS_NODE
će biti ignorisana, i ovo neće raditi.
Kao predloženo ovde, mogli biste zloupotrebiti ovu env varijablu u plist-u da održite postojanost:
NODE_OPTIONS
Možete sačuvati payload u drugoj datoteci i izvršiti ga:
Ako je osigurač EnableNodeOptionsEnvironmentVariable
onemogućen, aplikacija će zanemariti env var NODE_OPTIONS kada se pokrene, osim ako env var ELECTRON_RUN_AS_NODE
nije postavljen, koji će takođe biti zanemaren ako je osigurač RunAsNode
onemogućen.
Ako ne postavite ELECTRON_RUN_AS_NODE
, naići ćete na grešku: Većina NODE_OPTIONs nije podržana u pakovanim aplikacijama. Pogledajte dokumentaciju za više detalja.
Možete zloupotrebiti ovu env var u plist-u da održite postojanost dodavanjem ovih ključeva:
Prema ovome, ako izvršite Electron aplikaciju sa zastavicama kao što su --inspect
, --inspect-brk
i --remote-debugging-port
, debug port će biti otvoren tako da se možete povezati na njega (na primer iz Chrome-a u chrome://inspect
) i moći ćete da ubacite kod na njega ili čak pokrenete nove procese.
Na primer:
Ako je osigurač EnableNodeCliInspectArguments
onemogućen, aplikacija će zanemariti node parametre (kao što je --inspect
) prilikom pokretanja, osim ako je env varijabla ELECTRON_RUN_AS_NODE
postavljena, koja će takođe biti zanemarena ako je osigurač RunAsNode
onemogućen.
Međutim, i dalje možete koristiti electron param --remote-debugging-port=9229
, ali prethodni payload neće raditi za izvršavanje drugih procesa.
Korišćenjem parametra --remote-debugging-port=9222
moguće je ukrasti neke informacije iz Electron aplikacije kao što su istorija (sa GET komandama) ili kolačići pretraživača (pošto su dekriptovani unutar pretraživača i postoji json endpoint koji će ih dati).
Možete naučiti kako to da uradite ovde i ovde i koristiti automatski alat WhiteChocolateMacademiaNut ili jednostavan skript kao:
U ovoj blog objavi, ovo debagovanje se zloupotrebljava da se headless chrome preuzme proizvoljne datoteke na proizvoljnim lokacijama.
Možete zloupotrebiti ovu env promenljivu u plist-u da održite postojanost dodavanjem ovih ključeva:
TCC daemon iz macOS-a ne proverava verziju aplikacije koja se izvršava. Dakle, ako ne možete da injektujete kod u Electron aplikaciju sa bilo kojom od prethodnih tehnika, možete preuzeti prethodnu verziju APP-a i injektovati kod u nju jer će i dalje dobiti TCC privilegije (osim ako Trust Cache to ne spreči).
Prethodne tehnike će vam omogućiti da izvršavate JS kod unutar procesa Electron aplikacije. Međutim, zapamtite da dečiji procesi rade pod istim sandbox profilom kao roditeljska aplikacija i nasleđuju njihove TCC dozvole. Stoga, ako želite da zloupotrebite privilegije za pristup kameri ili mikrofonu, na primer, možete jednostavno izvršiti drugi binarni fajl iz procesa.
Alat electroniz3r se može lako koristiti za pronalazak ranjivih Electron aplikacija koje su instalirane i injektovanje koda u njih. Ovaj alat će pokušati da koristi --inspect
tehniku:
Morate ga sami kompajlirati i možete ga koristiti ovako:
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)