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 5b36d3502..e990b2b0a 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 @@ -20,11 +20,11 @@ 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 renderovanja (treba da ima ograničen pristup NodeJS-u iz bezbednosnih razloga) +- Proces renderera (treba da ima ograničen pristup NodeJS-u iz bezbednosnih razloga) ![](<../../../images/image (182).png>) -**Proces renderovanja** će biti prozor pregledača koji učitava datoteku: +**Proces renderera** će biti prozor pregledača koji učitava datoteku: ```javascript const { BrowserWindow } = require("electron") let win = new BrowserWindow() @@ -32,16 +32,16 @@ let win = new BrowserWindow() //Open Renderer Process win.loadURL(`file://path/to/index.html`) ``` -Podešavanja **renderer procesa** mogu se **konfigurisati** u **main procesu** 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 main.js datoteke. Neka od podešavanja će **sprečiti Electron aplikaciju da dobije RCE** ili druge ranjivosti ako su **podešavanja ispravno konfigurisana**. Electron aplikacija **može pristupiti uređaju** putem Node apija, iako se može konfigurisati da to spreči: -- **`nodeIntegration`** - je `isključen` po defaultu. Ako je uključen, omogućava pristup node funkcijama iz renderer procesa. -- **`contextIsolation`** - je `uključen` po defaultu. Ako je isključen, glavni i renderer procesi nisu izolovani. +- **`nodeIntegration`** - je `off` po defaultu. Ako je uključen, omogućava pristup node funkcijama iz renderer process. +- **`contextIsolation`** - je `on` 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 Radnicima -- **`nodeIntegrationInSubframes`** - je `isključen` po defaultu. +- Node Integration u Workers +- **`nodeIntegrationInSubframes`** - je `off` 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. @@ -101,7 +101,7 @@ Izmenite start-main konfiguraciju i dodajte korišćenje proksija kao što su: ```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 aplikaciju, moguće je da možete izvršiti proizvoljni JavaScript kod. Proverite kako u: @@ -123,7 +123,7 @@ top.require("child_process").exec("open /System/Applications/Calculator.app") ## RCE: preload -Skripta navedena u ovom podešavanju se l**oaduje pre drugih skripti u rendereru**, tako da ima **neograničen pristup Node API-ima**: +Skripta navedena u ovoj postavci se l**oadi pre drugih skripti u rendereru**, tako da ima **neograničen pristup Node API-ima**: ```javascript new BrowserWindow{ webPreferences: { @@ -132,7 +132,7 @@ preload: _path2.default.join(__dirname, 'perload.js'), } }); ``` -Stoga, skript može da eksportuje node-features na stranice: +Stoga, skripta može da eksportuje node-features na stranice: ```javascript:preload.js typeof require === "function" window.runCalc = function () { @@ -192,7 +192,7 @@ Kada korisnik interaguje sa linkovima ili otvara nove prozore, aktiviraju se spe webContents.on("new-window", function (event, url, disposition, options) {} webContents.on("will-navigate", function (event, url) {} ``` -Ovi slušatelji su **prepisani od strane desktop aplikacije** da implementiraju svoju vlastitu **poslovnu logiku**. Aplikacija procenjuje da li bi navigirani link trebao biti otvoren interno ili u spoljašnjem web pretraživaču. Ova odluka se obično donosi putem funkcije, `openInternally`. Ako ova funkcija vrati `false`, to ukazuje da link treba biti otvoren spolja, koristeći funkciju `shell.openExternal`. +Ovi slušatelji su **prepisani od strane desktop aplikacije** kako bi implementirali svoju **poslovnu logiku**. Aplikacija procenjuje da li bi navigirani link trebao biti otvoren interno ili u spoljašnjem web pretraživaču. Ova odluka se obično donosi putem funkcije, `openInternally`. Ako ova funkcija vrati `false`, to ukazuje da link treba biti otvoren spolja, koristeći funkciju `shell.openExternal`. **Evo pojednostavljenog pseudokoda:** @@ -200,7 +200,7 @@ Ovi slušatelji su **prepisani od strane desktop aplikacije** da implementiraju ![https://miro.medium.com/max/1400/1*ZfgVwT3X1V_UfjcKaAccag.png](<../../../images/image (963).png>) -Electron JS sigurnosne najbolje prakse savetuju protiv prihvatanja nepouzdanog sadržaja sa funkcijom `openExternal`, jer to može dovesti do RCE kroz različite protokole. Operativni sistemi podržavaju različite protokole koji mogu pokrenuti RCE. Za detaljne primere i dalja objašnjenja o ovoj temi, može se konsultovati [ovaj resurs](https://positive.security/blog/url-open-rce#windows-10-19042), koji uključuje primere Windows protokola sposobnih za iskorišćavanje ove ranjivosti. +Electron JS sigurnosne najbolje prakse savetuju protiv prihvatanja nepouzdanog sadržaja sa funkcijom `openExternal`, jer to može dovesti do RCE kroz različite protokole. Operativni sistemi podržavaju različite protokole koji mogu izazvati RCE. Za detaljne primere i dalju objašnjenje o ovoj temi, može se konsultovati [ovaj resurs](https://positive.security/blog/url-open-rce#windows-10-19042), koji uključuje primere Windows protokola sposobnih za iskorišćavanje ove ranjivosti. U macOS-u, funkcija `openExternal` može biti iskorišćena za izvršavanje proizvoljnih komandi kao u `shell.openExternal('file:///System/Applications/Calculator.app')`. @@ -253,7 +253,7 @@ Možete videti primer u ovom **writeup**: [https://blog.electrovolt.io/posts/dis ## **XSS Phishing putem zaobilaženja interne URL regex** -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**. +Pretpostavljajući da ste pronašli XSS, ali **ne možete aktivirati RCE ili ukrasti interne fajlove**, mogli biste pokušati da ga iskoristite za **krađu kredencijala 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: ```javascript @@ -262,7 +262,7 @@ webContents.on("will-navigate", function (event, url) {} // o ``` 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**. -U slučaju da je **regex** koji koristi funkcija **ranjiv na zaobilaženje** (na primer, ako **ne escapuje tačke subdomena**), 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 koristi funkcija **ranjiv na zaobilaženje** (na primer, **ne beži tačke subdomena**) 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: ```html