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)
Ikiwa hujui ni nini Electron, unaweza kupata habari nyingi hapa. Lakini kwa sasa jua tu kwamba Electron inatumia node. Na node ina parameta na env variables ambazo zinaweza kutumika kufanya itekeleze msimbo mwingine mbali na faili iliyoonyeshwa.
Mbinu hizi zitaelezewa baadaye, lakini katika nyakati za hivi karibuni Electron imeongeza bendera za usalama kadhaa kuzuia hizo. Hizi ni Electron Fuses na hizi ndizo zinazotumika kuzuia programu za Electron katika macOS kuchukua msimbo usio na mpangilio:
RunAsNode
: Ikiwa imezimwa, inazuia matumizi ya env var ELECTRON_RUN_AS_NODE
kuingiza msimbo.
EnableNodeCliInspectArguments
: Ikiwa imezimwa, parameta kama --inspect
, --inspect-brk
hazitazingatiwa. Inazuia njia hii kuingiza msimbo.
EnableEmbeddedAsarIntegrityValidation
: Ikiwa imewezeshwa, asar
faili iliyopakiwa itathibitishwa na macOS. Inazuia njia hii kuingiza msimbo kwa kubadilisha maudhui ya faili hii.
OnlyLoadAppFromAsar
: Ikiwa hii imewezeshwa, badala ya kutafuta kupakia kwa mpangilio ufuatao: app.asar
, app
na hatimaye default_app.asar
. Itakagua tu na kutumia app.asar, hivyo kuhakikisha kwamba wakati imeunganishwa na embeddedAsarIntegrityValidation
fuse haiwezekani kuchukua msimbo usio thibitishwa.
LoadBrowserProcessSpecificV8Snapshot
: Ikiwa imewezeshwa, mchakato wa kivinjari unatumia faili inayoitwa browser_v8_context_snapshot.bin
kwa ajili ya snapshot yake ya V8.
Fuse nyingine ya kuvutia ambayo haitazuia kuingiza msimbo ni:
EnableCookieEncryption: Ikiwa imewezeshwa, duka la kuki kwenye diski linachakatwa kwa kutumia funguo za cryptography za kiwango cha OS.
Unaweza kuangalia bendera hizi kutoka kwa programu kwa:
Kama nyaraka zinavyosema, usanidi wa Fuse za Electron umewekwa ndani ya Electron binary ambayo ina mahali fulani mfuatano wa herufi dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX
.
Katika programu za macOS hii kwa kawaida iko katika application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework
You could load this file in https://hexed.it/ and search for the previous string. After this string you can see in ASCII a number "0" or "1" indicating if each fuse is disabled or enabled. Just modify the hex code (0x30
is 0
and 0x31
is 1
) to modify the fuse values.
Note that if you try to overwrite the Electron Framework
binary inside an application with these bytes modified, the app won't run.
There could be external JS/HTML files that an Electron App is using, so an attacker could inject code in these files whose signature won't be checked and execute arbitrary code in the context of the app.
However, at the moment there are 2 limitations:
The kTCCServiceSystemPolicyAppBundles
permission is needed to modify an App, so by default this is no longer possible.
The compiled asap
file usually has the fuses embeddedAsarIntegrityValidation
and
onlyLoadAppFromAsar
enabled
Making this attack path more complicated (or impossible).
Note that it's possible to bypass the requirement of kTCCServiceSystemPolicyAppBundles
by copying the application to another directory (like /tmp
), renaming the folder app.app/Contents
to app.app/NotCon
, modifying the asar file with your malicious code, renaming it back to app.app/Contents
and executing it.
You can unpack the code from the asar file with:
Na uifunge tena baada ya kuibadilisha kwa:
ELECTRON_RUN_AS_NODE
Kulingana na nyaraka, ikiwa hii variable ya mazingira imewekwa, itaanzisha mchakato kama mchakato wa kawaida wa Node.js.
Ikiwa fuse RunAsNode
imezimwa, mabadiliko ya env ELECTRON_RUN_AS_NODE
yataachwa bila kutumika, na hii haitafanya kazi.
Kama ilivyopendekezwa hapa, unaweza kutumia mabadiliko haya ya env katika plist ili kudumisha uvumilivu:
NODE_OPTIONS
Unaweza kuhifadhi payload katika faili tofauti na kuitekeleza:
Ikiwa fuse EnableNodeOptionsEnvironmentVariable
ime zimwa, programu itakuwa ipuuze env var NODE_OPTIONS inapozinduliwa isipokuwa env variable ELECTRON_RUN_AS_NODE
imewekwa, ambayo pia itapuuziliwa mbali ikiwa fuse RunAsNode
imezimwa.
Ikiwa hujaweka ELECTRON_RUN_AS_NODE
, utaona kosa: Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.
Unaweza kutumia env variable hii katika plist ili kudumisha kudumu kwa kuongeza funguo hizi:
Kulingana na hii, ukitekeleza programu ya Electron kwa bendera kama --inspect
, --inspect-brk
na --remote-debugging-port
, bandari ya ufuatiliaji itafunguliwa ili uweze kuungana nayo (kwa mfano kutoka Chrome katika chrome://inspect
) na utaweza kuingiza msimbo ndani yake au hata kuzindua michakato mipya.
Kwa mfano:
Ikiwa fuse EnableNodeCliInspectArguments
imezimwa, programu itakuwa ikiweka kando vigezo vya node (kama --inspect
) inapozinduliwa isipokuwa variable ya env ELECTRON_RUN_AS_NODE
imewekwa, ambayo pia itakuwa ikiwekwa kando ikiwa fuse RunAsNode
imezimwa.
Hata hivyo, unaweza bado kutumia paramu ya electron --remote-debugging-port=9229
lakini payload ya awali haitafanya kazi kutekeleza michakato mingine.
Kwa kutumia paramu --remote-debugging-port=9222
inawezekana kuiba baadhi ya taarifa kutoka kwa Programu ya Electron kama historia (kwa amri za GET) au cookies za kivinjari (kama zinavyokuwa zimefichuliwa ndani ya kivinjari na kuna json endpoint ambayo itawapa).
Unaweza kujifunza jinsi ya kufanya hivyo hapa na hapa na kutumia chombo cha kiotomatiki WhiteChocolateMacademiaNut au script rahisi kama:
Katika hiki blogu, urekebishaji huu unatumika vibaya kufanya chrome isiyo na kichwa kupakua faili zisizo na mpangilio katika maeneo yasiyo na mpangilio.
Unaweza kutumia vibaya hii env variable katika plist ili kudumisha kudumu kwa kuongeza funguo hizi:
Daemoni wa TCC kutoka macOS hauangalii toleo lililotekelezwa la programu. Hivyo kama huwezi kuiingiza msimbo katika programu ya Electron kwa kutumia mbinu zozote za awali unaweza kupakua toleo la awali la APP na kuingiza msimbo ndani yake kwani bado itapata ruhusa za TCC (isipokuwa Trust Cache iizuie).
Mbinu za awali zitakuruhusu kuendesha msimbo wa JS ndani ya mchakato wa programu ya electron. Hata hivyo, kumbuka kwamba michakato ya watoto inakimbia chini ya wasifu sawa wa sandbox kama programu ya mzazi na inapata ruhusa zao za TCC. Hivyo, ikiwa unataka kutumia haki za kuingia ili kufikia kamera au kipaza sauti kwa mfano, unaweza tu kuendesha binary nyingine kutoka kwa mchakato.
Zana electroniz3r inaweza kutumika kwa urahisi ili kupata programu za electron zenye udhaifu zilizowekwa na kuingiza msimbo ndani yao. Zana hii itajaribu kutumia mbinu ya --inspect
:
Unahitaji kuikamilisha mwenyewe na unaweza kuitumia kama hii:
Jifunze & fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Jifunze & fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)