macOS Electron Applications Injection
Osnovne informacije
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.
Elektronski osigurači
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 varijableELECTRON_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čitanaasar
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 krajudefault_app.asar
. Proveravaće i koristiće samo app.asar, čime se obezbeđuje da kada se kombinuje sa osiguračemembeddedAsarIntegrityValidation
bude nemoguće učitati nevalidiran kod.LoadBrowserProcessSpecificV8Snapshot
: Ako je omogućeno, proces pregledača koristi datoteku nazvanubrowser_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.
Provera Elektronskih osigurača
Možete proveriti ove zastave iz aplikacije sa:
Modifikacija Elektron Fjuzova
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.
RCE dodavanje koda u Electron aplikacije
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čeembeddedAsarIntegrityValidation
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:
RCE sa ELECTRON_RUN_AS_NODE
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.
Injekcija iz App Plist-a
Kao što je predloženo ovde, možete zloupotrebiti ovu promenljivu okoline u plist datoteci da biste održali postojanost:
RCE sa NODE_OPTIONS
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.
Injekcija iz App Plist-a
Možete zloupotrebiti ovu env varijablu u plist datoteci da biste održali upornost dodavanjem ovih ključeva:
RCE sa inspekcijom
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.
Injekcija iz App Plist datoteke
Mogli biste zloupotrebiti ovu env promenljivu u plist datoteci da biste održali upornost dodavanjem ovih ključeva:
Bajpasovanje TCC-a zloupotrebom starijih verzija
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).
Pokretanje ne-JS koda
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.
Automatsko ubacivanje
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:
Reference
Last updated