macOS Electron Applications Injection
Last updated
Last updated
Naučite i vežbajte hakovanje AWS-a:HackTricks Obuka AWS Crveni Tim Stručnjak (ARTE) Naučite i vežbajte hakovanje GCP-a: HackTricks Obuka GCP Crveni Tim Stručnjak (GRTE)
Ako ne znate šta je Electron, možete pronaći mnogo informacija ovde. Ali za sada samo znajte da Electron pokreće node. I node ima neke parametre i env promenljive koje se mogu koristiti da bi se izvršio drugi kod osim navedene datoteke.
Ove tehnike će biti razmatrane u nastavku, ali u poslednje vreme Electron je dodao nekoliko sigurnosnih zastava kako bi ih sprečio. To su Elektronski osigurači i ovo su oni koji se koriste da spreče Electron aplikacije u macOS-u da učitavaju proizvoljan kod:
RunAsNode
: Ako je onemogućen, sprečava upotrebu env varijable ELECTRON_RUN_AS_NODE
za ubacivanje koda.
EnableNodeCliInspectArguments
: Ako je onemogućen, parametri poput --inspect
, --inspect-brk
neće biti poštovani. Na taj način se izbegava ubacivanje koda.
EnableEmbeddedAsarIntegrityValidation
: Ako je omogućeno, učitana asar
datoteka će biti validirana od strane macOS-a. Na ovaj način se sprečava ubacivanje koda modifikovanjem sadržaja ove datoteke.
OnlyLoadAppFromAsar
: Ako je ovo omogućeno, umesto pretrage za učitavanje u sledećem redosledu: app.asar
, app
i na kraju default_app.asar
. Proveravaće i koristiće samo app.asar, čime se obezbeđuje da kada se kombinuje sa osiguračem embeddedAsarIntegrityValidation
bude nemoguće učitati nevalidiran kod.
LoadBrowserProcessSpecificV8Snapshot
: Ako je omogućeno, proces pregledača koristi datoteku nazvanu browser_v8_context_snapshot.bin
za svoj V8 snimak.
Još jedan interesantan osigurač koji neće sprečiti ubacivanje koda je:
EnableCookieEncryption: Ako je omogućeno, skladište kolačića na disku je enkriptovano korišćenjem kriptografskih ključeva nivoa OS-a.
Možete proveriti ove zastave iz aplikacije sa:
Kako dokumentacija navodi, konfiguracija Elektron Fjuzova je podešena unutar Elektron binarnog koda koji negde sadrži string dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX
.
U macOS aplikacijama, ovo se obično nalazi u aplikacija.app/Contents/Frameworks/Electron Framework.framework/Electron Framework
Možete učitati ovaj fajl na https://hexed.it/ i pretražiti prethodni string. Nakon ovog stringa možete videti u ASCII formatu broj "0" ili "1" koji pokazuje da li je svaka osigurač isključen ili uključen. Samo izmenite heksadecimalni kod (0x30
je 0
i 0x31
je 1
) da izmenite vrednosti osigurača.
Imajte na umu da ako pokušate prepisati binarni fajl Electron Framework-a 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 ubaciti kod u ove fajlove čiji potpis neće biti proveren i izvršiti proizvoljan kod u kontekstu aplikacije.
Međutim, trenutno postoje 2 ograničenja:
Potrebna je dozvola kTCCServiceSystemPolicyAppBundles
da bi se izmenila aplikacija, tako da po defaultu ovo više nije moguće.
Kompajlirani asap
fajl obično ima osigurače embeddedAsarIntegrityValidation
i
onlyLoadAppFromAsar
omogućene
Što ovaj put napada čini 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
, izmenom asar fajla sa vašim zlonamernim kodom, ponovnim preimenovanjem nazad u app.app/Contents
i izvršavanjem.
Možete otpakovati kod iz asar fajla sa:
I zapakujte ga nazad nakon što ste ga izmenili sa:
ELECTRON_RUN_AS_NODE
Prema dokumentaciji, ako je ova env promenljiva postavljena, pokrenuće proces kao običan Node.js proces.
Ako je osigurač RunAsNode
onemogućen, promenljiva okoline ELECTRON_RUN_AS_NODE
će biti ignorisana, i ovo neće raditi.
Kao što je predloženo ovde, možete zloupotrebiti ovu promenljivu okoline u plist datoteci da biste održali postojanost:
NODE_OPTIONS
Možete sačuvati payload u drugom fajlu i izvršiti ga:
Ako je osigurač EnableNodeOptionsEnvironmentVariable
onemogućen, aplikacija će ignorisati env var NODE_OPTIONS prilikom pokretanja osim ako je postavljena env varijabla ELECTRON_RUN_AS_NODE
, koja će takođe biti ignorisana ako je osigurač RunAsNode
onemogućen.
Ako ne postavite ELECTRON_RUN_AS_NODE
, dobićete grešku: Većina NODE_OPTIONa nije podržana u pakovanim aplikacijama. Pogledajte dokumentaciju za više detalja.
Možete zloupotrebiti ovu env varijablu u plist datoteci da biste održali upornost dodavanjem ovih ključeva:
Prema ovom izvoru, ako pokrenete Electron aplikaciju sa zastavicama poput --inspect
, --inspect-brk
i --remote-debugging-port
, otvoren će biti debug port na koji možete da se povežete (na primer iz Chrome-a na chrome://inspect
) i bićete u mogućnosti da ubacite kod u nju ili čak pokrenete nove procese.
Na primer:
Ako je osigurač EnableNodeCliInspectArguments
onemogućen, aplikacija će ignorisati node parametre (kao što su --inspect
) prilikom pokretanja osim ako je postavljena promenljiva okruženja ELECTRON_RUN_AS_NODE
, koja će takođe biti ignorisana ako je osigurač RunAsNode
onemogućen.
Međutim, i dalje možete koristiti electron parametar --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 poput istorije (sa GET komandama) ili kolačića pregledača (jer su dekriptovani unutar pregledača i postoji json endpoint koji će ih dati).
Možete naučiti kako to uraditi ovde i ovde i koristiti automatski alat WhiteChocolateMacademiaNut ili jednostavan skript kao:
U ovom blog postu, ovaj debagovanje je zloupotrebljen da bi headless chrome preuzeo proizvoljne datoteke na proizvoljne lokacije.
Mogli biste zloupotrebiti ovu env promenljivu u plist datoteci da biste održali upornost dodavanjem ovih ključeva:
TCC daemon sa macOS-a ne proverava izvršenu verziju aplikacije. Dakle, ako ne možete ubaciti kod u Electron aplikaciju pomoću bilo koje od prethodnih tehnika, možete preuzeti prethodnu verziju APLIKACIJE i ubaciti kod u nju jer će i dalje dobiti TCC privilegije (osim ako Trust Cache to sprečava).
Prethodne tehnike će vam omogućiti da pokrenete JS kod unutar procesa elektronske aplikacije. Međutim, zapamtite da podprocesi pokreću isti sandbox profil kao roditeljska aplikacija i nasleđuju njihove TCC dozvole. Stoga, ako želite zloupotrebiti privilegije da pristupite kameri ili mikrofonu na primer, jednostavno možete pokrenuti drugi binarni fajl iz procesa.
Alatka electroniz3r može se lako koristiti za pronalaženje ranjivih elektronskih aplikacija instaliranih i ubacivanje koda u njih. Ovaj alat će pokušati koristiti tehniku --inspect
:
Morate je sami kompajlirati i možete je koristiti na ovaj način:
Učite i vežbajte hakovanje AWS:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte hakovanje GCP: HackTricks Training GCP Red Team Expert (GRTE)