macOS Electron Applications Injection
Basiese Inligting
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.
Electron-skerms
Hierdie tegnieke sal later bespreek word, maar onlangs het Electron verskeie sekuriteitsvlaggies bygevoeg om hulle te voorkom. Dit is die Electron-skerms en dit is diegene wat gebruik word om te voorkom dat Electron-toepassings in macOS willekeurige kode laai:
RunAsNode
: As dit gedeaktiveer is, voorkom dit die gebruik van die omgewingsveranderlikeELECTRON_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 op hierdie manier kode-inspuiting.EnableEmbeddedAsarIntegrityValidation
: As dit geaktiveer is, sal die gelaaiasar
-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, in plaas van soek om in die volgende volgorde te laai:app.asar
,app
en uiteindelikdefault_app.asar
. Dit sal netapp.asar
nagaan en gebruik, wat verseker dat wanneer dit gekombineer word met dieembeddedAsarIntegrityValidation
-skerm dit onmoontlik is om nie-gevalideerde kode te laai.LoadBrowserProcessSpecificV8Snapshot
: As dit geaktiveer is, gebruik die blaaierproses die lêer genaamdbrowser_v8_context_snapshot.bin
vir sy V8-snapshot.
'n Ander interessante skerm 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.
Kontroleer Electron-skerms
Jy kan hierdie vlae nagaan vanuit 'n toepassing met:
Wysiging van Electron-sekering
Soos die dokumente aandui, word die konfigurasie van die Electron-skerings 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. Verander eenvoudig 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 te owerwrite met hierdie veranderde bytes, sal die toepassing nie loop nie.
RCE kode byvoeg tot Electron-toepassings
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 kan uitvoer in die konteks van die toepassing.
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 fuiseembeddedAsarIntegrityValidation
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 verander, 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:
RCE met ELECTRON_RUN_AS_NODE
ELECTRON_RUN_AS_NODE
Volgens die dokumentasie, as hierdie omgewingsveranderlike ingestel is, sal dit die proses begin as 'n normale Node.js-proses.
As die RunAsNode
-siklus uitgeschakel is, sal die omgewingsveranderlike ELECTRON_RUN_AS_NODE
geïgnoreer word, en dit sal nie werk nie.
Inspruiting van die App Plist
Soos voorgestel hier, kan jy hierdie omgewingsveranderlike in 'n plist misbruik om volharding te handhaaf:
RCE met NODE_OPTIONS
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.
Inspruiting van die App Plist
Jy kan hierdie omgewingsveranderlike misbruik in 'n plist om volharding te handhaaf deur hierdie sleutels by te voeg:
RCE met inspeksie
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 gedekodeer 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.
Inspruiting vanaf die App Plist
Jy kan hierdie omgewingsveranderlike misbruik in 'n plist om volhoubaarheid by te voeg deur hierdie sleutels:
TCC Oorsteek misbruik van Ouer Weergawes
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).
Voer nie-JS-kode uit
Die vorige tegnieke sal jou toelaat om JS-kode binne die proses van die Electron-aansoek uit te voer. Onthou egter dat die kindprosesse onder dieselfde sandbakkieprofiel as die ouer aansoek loop en hul TCC-toestemmings erf. Dus, 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.
Outomatiese Inspruiting
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:
Verwysings
Last updated