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 85fb8217d..e48dac18e 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 @@ -2,16 +2,16 @@ {{#include ../../../banners/hacktricks-training.md}} -## Uvod +## Introduction -Electron kombinuje lokalni backend (sa **NodeJS**) i frontend (**Chromium**), iako mu nedostaju neki od bezbednosnih mehanizama modernih pregledača. +Electron kombinuje lokalni backend (sa **NodeJS**) i frontend (**Chromium**), iako mu nedostaju neki sigurnosni mehanizmi modernih pretraživača. -Obično možete pronaći kod electron aplikacije unutar `.asar` aplikacije, kako biste dobili kod, potrebno je da ga ekstrahujete: +Obično ćete pronaći kod Electron aplikacije unutar `.asar` aplikacije; da biste dobili kod, potrebno ga je ekstrahovati: ```bash npx asar extract app.asar destfolder #Extract everything npx asar extract-file app.asar main.js #Extract just a file ``` -U izvornoj kodu Electron aplikacije, unutar `packet.json`, možete pronaći navedenu `main.js` datoteku gde su postavljene bezbednosne konfiguracije. +U izvornom kodu Electron aplikacije, unutar `packet.json`, možete pronaći navedenu datoteku `main.js` u kojoj su postavljene sigurnosne konfiguracije. ```json { "name": "standard-notes", @@ -19,12 +19,12 @@ U izvornoj kodu Electron aplikacije, unutar `packet.json`, možete pronaći nave ``` Electron ima 2 tipa procesa: -- Glavni proces (ima potpun pristup NodeJS-u) -- Proces renderera (treba da ima ograničen pristup NodeJS-u iz bezbednosnih razloga) +- Main Process (ima potpuni pristup NodeJS-u) +- Renderer Process (trebalo bi da ima ograničen pristup NodeJS-u iz bezbednosnih razloga) ![](<../../../images/image (182).png>) -**Proces renderera** će biti prozor pregledača koji učitava datoteku: +Jedan **renderer process** biće prozor pregledača koji učitava fajl: ```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`) ``` -Podešavanja **renderer process** mogu se **konfigurisati** u **main process** unutar main.js datoteke. Neka od podešavanja će **sprečiti Electron aplikaciju da dobije RCE** ili druge ranjivosti ako su **podešavanja ispravno konfigurisana**. +Podešavanja **renderer process** mogu se **konfigurisati** u **main process** unutar fajla main.js. Neka od podešavanja mogu da **spreče Electron aplikaciju da dobije RCE** ili druge ranjivosti ako su **podešavanja ispravno podešena**. -Electron aplikacija **može pristupiti uređaju** putem Node apija, iako se može konfigurisati da to spreči: +Electron aplikacija **može pristupiti uređaju** preko Node APIs iako se to može konfigurisati da se to spreči: -- **`nodeIntegration`** - je `isključen` po defaultu. Ako je uključen, omogućava pristup node funkcijama iz renderer process. -- **`contextIsolation`** - je `uključen` po defaultu. Ako je isključen, main i renderer procesi nisu izolovani. -- **`preload`** - prazan po defaultu. -- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - je isključen po defaultu. Ograničiće akcije koje NodeJS može izvesti. -- Node Integration u Workers -- **`nodeIntegrationInSubframes`** - je `isključen` po defaultu. -- Ako je **`nodeIntegration`** **omogućen**, to bi omogućilo korišćenje **Node.js API-a** na web stranicama koje su **učitane u iframes** unutar Electron aplikacije. -- Ako je **`nodeIntegration`** **onemogućen**, tada će preloads biti učitani u iframe. +- **`nodeIntegration`** - po defaultu je `off`. Ako je on, omogućava pristup Node funkcijama iz renderer process. +- **`contextIsolation`** - po defaultu je `on`. Ako je `off`, main i renderer processes nisu izolovani. +- **`preload`** - podrazumevano prazan. +- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - po defaultu je `off`. Ograničiće akcije koje NodeJS može izvršavati. +- Node Integration in Workers +- **`nodeIntegrationInSubframes`** - po defaultu je `off`. +- Ako je **`nodeIntegration`** **omogućeno**, to bi omogućilo korišćenje **Node.js APIs** na web stranicama koje su **učitane u iframes** unutar Electron aplikacije. +- Ako je **`nodeIntegration`** **onemogućeno**, preloads će se učitavati u iframe. -Primer konfiguracije: +Example of configuration: ```javascript const mainWindowOptions = { title: "Discord", @@ -71,7 +71,7 @@ spellcheck: true, }, } ``` -Neki **RCE payloads** sa [ovde](https://7as.es/electron/nodeIntegration_rce.txt): +Neki **RCE payloads** sa [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 +### Presretanje saobraćaja -Izmenite start-main konfiguraciju i dodajte korišćenje proksija kao što su: +Izmenite konfiguraciju start-main i dodajte korišćenje proxy-ja kao na primer: ```javascript "start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors", ``` -## Electron Local Code Injection +## Electron lokalna injekcija koda + +Ako možete lokalno izvršiti Electron App, moguće je da ga naterate da izvrši proizvoljni javascript kod. Pogledajte kako u: -Ako možete lokalno izvršiti Electron aplikaciju, moguće je da možete izvršiti proizvoljni JavaScript kod. Proverite kako u: {{#ref}} ../../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md @@ -111,7 +112,7 @@ Ako možete lokalno izvršiti Electron aplikaciju, moguće je da možete izvrši ## RCE: XSS + nodeIntegration -Ako je **nodeIntegration** postavljen na **on**, JavaScript web stranice može lako koristiti Node.js funkcije jednostavno pozivajući `require()`. Na primer, način za izvršavanje kalkulator aplikacije na Windows-u je: +Ako je **nodeIntegration** podešen na **on**, JavaScript web stranice može koristiti Node.js mogućnosti jednostavno pozivom `require()`. Na primer, način da se pokrene calc aplikacija na Windowsu je: ```html ``` -## **RCE: XSS + Old Chromium** +## **RCE: XSS + stariji chromium** -Ako je **chromium** koji koristi aplikacija **star** i postoje **poznate** **ranjivosti** u njemu, može biti moguće **iskoristiti ga i dobiti RCE putem XSS**.\ -Možete videti primer u ovom **writeup**: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/) +Ako je **chromium** koji aplikacija koristi **stariji** i postoje **poznate** **ranjivosti** u njemu, može biti moguće da **iskoristite to i dobijete RCE kroz XSS**.\ +Možete videti primer u ovom **writeupu**: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/) -## **XSS Phishing putem zaobilaženja interne URL regex** +## **XSS Phishing putem internog URL regex bypass** -Pretpostavljajući da ste pronašli XSS, ali **ne možete pokrenuti RCE ili ukrasti interne fajlove**, mogli biste pokušati da ga iskoristite za **krađu kredencijala putem phishinga**. +Pretpostavimo da ste našli XSS, ali **ne možete pokrenuti RCE ili ukrasti interne fajlove** — možete pokušati da ga iskoristite za **ukrasti pristupne podatke putem phishinga**. -Prvo što treba da znate je šta se dešava kada pokušate da otvorite novu URL adresu, proveravajući JS kod u front-endu: +Pre svega, treba da znate šta se dešava kada pokušate da otvorite novi URL, proverom JS koda u front-endu: ```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) ``` -Poziv na **`openInternally`** će odlučiti da li će **link** biti **otvoren** u **desktop prozoru** kao link koji pripada platformi, **ili** će biti otvoren u **pregledaču kao resurs treće strane**. +Poziv **`openInternally`** odlučuje da li će **link** biti **otvoren** u **desktop prozoru** jer je to link koji pripada platformi, **ili** da li će biti otvoren u **pregledaču kao resurs treće strane**. -U slučaju da je **regex** koji koristi funkcija **ranjiv na zaobilaženje** (na primer, ako **ne escape-uje tačke poddomena**), napadač bi mogao da iskoristi XSS da **otvori novi prozor koji** će biti smešten u infrastrukturi napadača **tražeći kredencijale** od korisnika: +U slučaju da je **regex** koji funkcija koristi **ranjiv na bypasses** (na primer time što **ne escape-uje tačke poddomena**) attacker bi mogao iskoristiti **XSS** da **otvori novi prozor koji** će biti lociran u infrastrukturi napadača i **tražiti credentials** od korisnika: ```html