Electron Desktop Apps
WhiteIntel ni injini ya kutafuta inayotumiwa na dark-web ambayo inatoa kazi za bure kuangalia ikiwa kampuni au wateja wake wamekuwa compromised na stealer malwares.
Lengo lao kuu la WhiteIntel ni kupambana na utekaji wa akaunti na mashambulizi ya ransomware yanayotokana na malware inayopora taarifa.
Unaweza kuangalia tovuti yao na kujaribu injini yao kwa bure kwenye:
Introduction
Electron inachanganya backend wa ndani (na NodeJS) na frontend (Chromium), ingawa inakosa baadhi ya mitambo ya usalama ya vivinjari vya kisasa.
Kwa kawaida unaweza kupata msimbo wa programu ya electron ndani ya programu ya .asar
, ili kupata msimbo unahitaji kuutoa:
Katika msimbo wa chanzo wa programu ya Electron, ndani ya packet.json
, unaweza kupata iliyoainishwa faili ya main.js
ambapo mipangilio ya usalama imewekwa.
Electron ina aina 2 za michakato:
Michakato Kuu (ina ufikiaji kamili wa NodeJS)
Michakato ya Renderer (inapaswa kuwa na ufikiaji wa NodeJS ulio na vizuizi kwa sababu za usalama)
mchakato wa renderer utakuwa dirisha la kivinjari linalopakia faili:
Settings of the renderer process can be configured in the main process inside the main.js file. Some of the configurations will prevent the Electron application to get RCE or other vulnerabilities if the settings are correctly configured.
The electron application could access the device via Node apis although it can be configure to prevent it:
nodeIntegration
- nioff
kwa default. Ikiwa iko, inaruhusu kufikia vipengele vya node kutoka kwa mchakato wa renderer.contextIsolation
- ikoon
kwa default. Ikiwa iko off, mchakato mkuu na mchakato wa renderer si tofauti.preload
- tupu kwa default.sandbox
- iko off kwa default. Itapunguza vitendo ambavyo NodeJS inaweza kufanya.Node Integration in Workers
nodeIntegrationInSubframes
- ikooff
kwa default.Ikiwa
nodeIntegration
ime wezeshwa, hii itaruhusu matumizi ya Node.js APIs katika kurasa za wavuti ambazo zime pakiwa katika iframes ndani ya programu ya Electron.Ikiwa
nodeIntegration
ime zuiliwa, basi preloads zita load katika iframe
Example of configuration:
Baadhi ya RCE payloads kutoka hapa:
Capture traffic
Badilisha usanidi wa start-main na ongeza matumizi ya proxy kama:
Electron Local Code Injection
Ikiwa unaweza kutekeleza programu ya Electron kwa ndani, inawezekana kwamba unaweza kufanya itekeleze msimbo wa javascript wa kiholela. Angalia jinsi katika:
macOS Electron Applications InjectionRCE: XSS + nodeIntegration
Ikiwa nodeIntegration imewekwa kuwa on, JavaScript ya ukurasa wa wavuti inaweza kutumia vipengele vya Node.js kwa urahisi kwa kuita require()
. Kwa mfano, njia ya kutekeleza programu ya calc kwenye Windows ni:
RCE: preload
Scripti iliyoonyeshwa katika mipangilio hii inachukuliwa kabla ya scripti nyingine katika renderer, hivyo ina ufikiaji usio na kikomo kwa Node APIs:
Kwa hivyo, script inaweza kusafirisha node-features kwa kurasa:
Ikiwa contextIsolation
iko juu, hii haitafanya kazi
RCE: XSS + contextIsolation
contextIsolation inanzisha muktadha tofauti kati ya skripti za ukurasa wa wavuti na msimbo wa ndani wa JavaScript wa Electron ili utekelezaji wa JavaScript wa kila msimbo usiathiriane. Hii ni kipengele muhimu kuondoa uwezekano wa RCE.
Ikiwa muktadha haujawekwa kando, mshambuliaji anaweza:
Kutekeleza JavaScript isiyo na mipaka katika renderer (XSS au kuhamia kwenye tovuti za nje)
Kufuta njia iliyojengwa ndani ambayo inatumika katika preload au msimbo wa ndani wa Electron kwa kazi yake
Kusababisha matumizi ya kazi iliyofutwa
RCE?
Kuna maeneo 2 ambapo njia zilizojengwa ndani zinaweza kufutwa: Katika msimbo wa preload au katika msimbo wa ndani wa Electron:
Electron contextIsolation RCE via preload codeElectron contextIsolation RCE via Electron internal codeElectron contextIsolation RCE via IPCBypass click event
Ikiwa kuna vizuizi vilivyowekwa unapobofya kiungo, huenda ukawa na uwezo wa kuvipita kwa kufanya bofya katikati badala ya bofya la kushoto la kawaida.
RCE kupitia shell.openExternal
Kwa maelezo zaidi kuhusu mifano hii angalia https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8 na https://benjamin-altpeter.de/shell-openexternal-dangers/
Wakati wa kutekeleza programu ya desktop ya Electron, kuhakikisha mipangilio sahihi ya nodeIntegration
na contextIsolation
ni muhimu. Imeanzishwa kwamba utendaji wa mbali wa msimbo wa mteja (RCE) unaolenga skripti za preload au msimbo wa asili wa Electron kutoka kwa mchakato mkuu unazuia kwa ufanisi na mipangilio hii ikiwa mahali.
Wakati mtumiaji anapoingiliana na viungo au kufungua madirisha mapya, wasikilizaji maalum wa matukio huanzishwa, ambayo ni muhimu kwa usalama na utendaji wa programu:
Hawa wasikilizaji wanabadilishwa na programu ya desktop ili kutekeleza mantiki yake ya biashara. Programu inakadiria ikiwa kiungo kilichotembelewa kinapaswa kufunguliwa ndani au kwenye kivinjari cha mtandao cha nje. Uamuzi huu kwa kawaida unafanywa kupitia kazi, openInternally
. Ikiwa kazi hii inarudisha false
, inaashiria kwamba kiungo kinapaswa kufunguliwa nje, kwa kutumia kazi ya shell.openExternal
.
Hapa kuna pseudocode iliyo rahisishwa:
Miongozo bora ya usalama ya Electron JS inashauri kutochukua maudhui yasiyoaminika kwa kutumia kazi ya openExternal
, kwani inaweza kusababisha RCE kupitia protokali mbalimbali. Mifumo ya uendeshaji inasaidia protokali tofauti ambazo zinaweza kusababisha RCE. Kwa mifano ya kina na maelezo zaidi juu ya mada hii, mtu anaweza kurejelea rasilimali hii, ambayo inajumuisha mifano ya protokali za Windows zinazoweza kutumia udhaifu huu.
Mifano ya matumizi ya protokali za Windows ni pamoja na:
Kusoma Faili za Ndani: XSS + contextIsolation
Kuzima contextIsolation
kunaruhusu matumizi ya <webview>
tags, sawa na <iframe>
, kwa ajili ya kusoma na kutoa faili za ndani. Mfano uliotolewa unaonyesha jinsi ya kutumia udhaifu huu kusoma maudhui ya faili za ndani:
Zaidi, njia nyingine ya kusoma faili ya ndani inashirikiwa, ikionyesha udhaifu muhimu wa kusoma faili za ndani katika programu ya desktop ya Electron. Hii inahusisha kuingiza script ili kutumia programu na kutoa data:
RCE: XSS + Old Chromium
Ikiwa chromium inayotumiwa na programu ni ya zamani na kuna udhaifu uliotambulika juu yake, inaweza kuwa inawezekana kuikabili na kupata RCE kupitia XSS. Unaweza kuona mfano katika writeup hii: https://blog.electrovolt.io/posts/discord-rce/
XSS Phishing kupitia Internal URL regex bypass
Kukisia umepata XSS lakini huwezi kuanzisha RCE au kuiba faili za ndani unaweza kujaribu kuitumia kuiba akidi kupitia phishing.
Kwanza kabisa unahitaji kujua kinachotokea unapojaribu kufungua URL mpya, ukikagua msimbo wa JS katika front-end:
The call to openInternally
itamua kama kiungo kita funguliwa katika dirisha la desktop kama ni kiungo kinachomilikiwa na jukwaa, au kama kitafunguliwa katika browza kama rasilimali ya upande wa tatu.
Katika kesi ambapo regex inayotumika na kazi hiyo ni dhaifu kwa kupita (kwa mfano kwa kutokuepusha alama za nukta za subdomains) mshambuliaji anaweza kutumia XSS ili kufungua dirisha jipya ambalo litakuwa katika miundombinu ya mshambuliaji likiomba taarifa za kuingia kwa mtumiaji:
Tools
Electronegativity ni chombo cha kutambua makosa ya usanidi na mifumo ya usalama isiyo sahihi katika programu za msingi wa Electron.
Electrolint ni nyongeza ya chanzo wazi ya VS Code kwa programu za Electron inayotumia Electronegativity.
nodejsscan kuangalia maktaba za wahusika wa tatu zenye udhaifu
Electro.ng: Unahitaji kununua
Labs
Katika https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s unaweza kupata maabara ya kutumia programu za Electron zenye udhaifu.
Baadhi ya amri zitakazokusaidia katika maabara:
Marejeo
Utafiti zaidi na maandiko kuhusu usalama wa Electron katika https://github.com/doyensec/awesome-electronjs-hacking
WhiteIntel ni injini ya utafutaji inayotumiwa na dark-web ambayo inatoa kazi za bure kuangalia kama kampuni au wateja wake wamekuwa kuyumbishwa na stealer malwares.
Lengo lao kuu la WhiteIntel ni kupambana na utekaji wa akaunti na mashambulizi ya ransomware yanayotokana na malware inayopora taarifa.
Unaweza kuangalia tovuti yao na kujaribu injini yao kwa bure katika:
Last updated