macOS Electron Applications Injection
Last updated
Last updated
Leer en oefen AWS-hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer en oefen GCP-hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
As jy nie weet wat Electron is nie, kan jy baie inligting hier vind. Maar vir nou moet jy net weet dat Electron node laat loop. En node het sekere parameters en omgewingsveranderlikes wat gebruik kan word om dit ander kode te laat uitvoer as die aangeduide lêer.
Hierdie tegnieke sal later bespreek word, maar onlangs het Electron verskeie sekuriteitsvlaggies bygevoeg om hulle te voorkom. Dit is die Electron-smeulstowwe en dit is diegene wat gebruik word om Electron-toepassings in macOS te verhoed om arbitrêre kode te laai:
RunAsNode
: As dit gedeaktiveer is, voorkom dit die gebruik van die omgewingsveranderlike ELECTRON_RUN_AS_NODE
om kode in te spuit.
EnableNodeCliInspectArguments
: As dit gedeaktiveer is, sal parameters soos --inspect
, --inspect-brk
nie gerespekteer word nie. Dit verhoed sodoende die inspuiting van kode.
EnableEmbeddedAsarIntegrityValidation
: As dit geaktiveer is, sal die gelaai asar
-lêer deur macOS gevalideer word. Dit verhoed op hierdie manier kode-inspuiting deur die inhoud van hierdie lêer te wysig.
OnlyLoadAppFromAsar
: As dit geaktiveer is, sal dit slegs die app.asar
ondersoek en gebruik in plaas van om in die volgende volgorde te soek: app.asar
, app
en uiteindelik default_app.asar
. Dit verseker dat wanneer dit gekombineer word met die embeddedAsarIntegrityValidation
-smeulstof dit onmoontlik is om nie-gevalideerde kode te laai.
LoadBrowserProcessSpecificV8Snapshot
: As dit geaktiveer is, gebruik die blaaierproses die lêer genaamd browser_v8_context_snapshot.bin
vir sy V8-snapshot.
'n Ander interessante smeulstof wat nie kode-inspuiting sal voorkom nie, is:
EnableCookieEncryption: As dit geaktiveer is, word die koekie-stoor op skyf met OS-vlak kriptografie sleutels geënkripteer.
Jy kan hierdie vlae kontroleer vanuit 'n toepassing met:
Soos die dokumente aandui, word die konfigurasie van die Electron-sekeringe ingestel binne die Electron-binêre lêer wat êrens die string dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX
bevat.
In macOS-toepassings is dit tipies in application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework
Jy kan hierdie lêer in https://hexed.it/ laai en soek na die vorige string. Na hierdie string kan jy in ASCII 'n nommer "0" of "1" sien wat aandui of elke fuus gedeaktiveer of geaktiveer is. Wysig net die hekskode (0x30
is 0
en 0x31
is 1
) om die fuuswaardes te wysig.
Merk op dat as jy probeer om die Electron Framework
binêre lêer binne 'n toepassing met hierdie gewysigde bytes te owerwrite, sal die toepassing nie loop nie.
Daar kan eksterne JS/HTML-lêers wees wat 'n Electron-toepassing gebruik, sodat 'n aanvaller kode in hierdie lêers kan inspuit waarvan die handtekening nie nagegaan sal word nie en arbitrêre kode in die konteks van die toepassing kan uitvoer.
Daar is egter tans 2 beperkings:
Die kTCCServiceSystemPolicyAppBundles
toestemming is nodig om 'n toepassing te wysig, dus is dit standaard nie meer moontlik nie.
Die saamgestelde asap
lêer het gewoonlik die fuise embeddedAsarIntegrityValidation
en
onlyLoadAppFromAsar
geaktiveer
Dit maak hierdie aanvalspad meer ingewikkeld (of onmoontlik).
Merk op dat dit moontlik is om die vereiste van kTCCServiceSystemPolicyAppBundles
te omseil deur die toepassing na 'n ander gids te kopieer (soos /tmp
), die vouer app.app/Contents
te hernoem na app.app/NotCon
, die asar lêer met jou skadelike kode te wysig, dit terug te hernoem na app.app/Contents
en dit uit te voer.
Jy kan die kode uit die asar-lêer uitpak met:
En pak dit terug nadat dit gewysig is met:
ELECTRON_RUN_AS_NODE
Volgens die dokumente, as hierdie omgewingsveranderlike ingestel is, sal dit die proses begin as 'n normale Node.js-proses.
As die RunAsNode
-siklus uitgeskakel is, sal die omgewingsveranderlike ELECTRON_RUN_AS_NODE
geïgnoreer word, en dit sal nie werk nie.
Soos voorgestel hier, kan jy hierdie omgewingsveranderlike misbruik in 'n plist om volharding te handhaaf:
NODE_OPTIONS
Jy kan die lading in 'n ander lêer stoor en dit uitvoer:
As die smeltkroes EnableNodeOptionsEnvironmentVariable
is uitgeskakel, sal die app die omgewingsveranderlike NODE_OPTIONS ignoreer wanneer dit begin word tensy die omgewingsveranderlike ELECTRON_RUN_AS_NODE
ingestel is, wat ook ignoreer sal word as die smeltkroes RunAsNode
uitgeskakel is.
As jy nie ELECTRON_RUN_AS_NODE
instel nie, sal jy die fout kry: Meeste NODE_OPTIONs word nie ondersteun in gepakde programme nie. Sien dokumentasie vir meer besonderhede.
Jy kan hierdie omgewingsveranderlike misbruik in 'n plist om volharding te behou deur hierdie sleutels by te voeg:
Volgens hierdie artikel, as jy 'n Electron-toepassing uitvoer met vlae soos --inspect
, --inspect-brk
en --remote-debugging-port
, sal 'n debuutpoort oop wees sodat jy daarmee kan verbind (byvoorbeeld vanaf Chrome in chrome://inspect
) en jy sal in staat wees om kode daarin in te spuit of selfs nuwe prosesse te begin.
Byvoorbeeld:
Indien die EnableNodeCliInspectArguments
-fusie gedeaktiveer is, sal die app node parameters ignoreer (soos --inspect
) wanneer dit begin word tensy die omgewingsveranderlike ELECTRON_RUN_AS_NODE
ingestel is, wat ook ignoreer sal word as die RunAsNode
-fusie gedeaktiveer is.
Nogtans kan jy steeds die electron param --remote-debugging-port=9229
gebruik, maar die vorige lading sal nie werk om ander prosesse uit te voer nie.
Deur die param --remote-debugging-port=9222
te gebruik, is dit moontlik om sekere inligting van die Electron App te steel soos die geskiedenis (met GET-opdragte) of die koekies van die webblaaier (aangesien hulle binne die webblaaier gedekripteer word en daar 'n json eindpunt is wat hulle sal gee).
Jy kan leer hoe om dit te doen hier en hier en die outomatiese instrument WhiteChocolateMacademiaNut gebruik of 'n eenvoudige skrips soos:
In hierdie blogpos, word hierdie foutopsporing misbruik om 'n headless chrome willekeurige lêers op willekeurige plekke af te laai.
Jy kan hierdie omgewingsveranderlike misbruik in 'n plist om volhoubaarheid by te voeg deur hierdie sleutels:
Die TCC daemon van macOS kontroleer nie die uitgevoerde weergawe van die aansoek nie. As jy dus nie kode kan inspuit in 'n Electron-aansoek nie met enige van die vorige tegnieke nie, kan jy 'n vorige weergawe van die toepassing aflaai en kode daarin inspuit, aangesien dit steeds die TCC-voorregte sal kry (tensy die Trust Cache dit voorkom).
Die vorige tegnieke sal jou in staat stel om JS-kode binne die proses van die Electron-aansoek uit te voer. Onthou egter dat die kindprosesse onder dieselfde sandbakkieprofiel as die oueraansoek loop en hul TCC-toestemmings erf. Daarom, as jy voorregte wil misbruik om byvoorbeeld toegang tot die kamera of mikrofoon te verkry, kan jy net 'n ander binêre lêer vanuit die proses uitvoer.
Die instrument electroniz3r kan maklik gebruik word om kwesbare Electron-aansoeke wat geïnstalleer is, te vind en kode daarin in te spuit. Hierdie instrument sal probeer om die --inspect
tegniek te gebruik:
Jy moet dit self saamstel en kan dit so gebruik:
Leer & oefen AWS-hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP-hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)