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-des
This commit is contained in:
		
							parent
							
								
									cc62f535fa
								
							
						
					
					
						commit
						a6add8d0d1
					
				@ -34,12 +34,12 @@ win.loadURL(`file://path/to/index.html`)
 | 
			
		||||
```
 | 
			
		||||
Le impostazioni del **renderer process** possono essere **configurate** nel **main process** all'interno del file main.js. Alcune delle configurazioni **preveniranno all'applicazione Electron di ottenere RCE** o altre vulnerabilità se le **impostazioni sono configurate correttamente**.
 | 
			
		||||
 | 
			
		||||
L'applicazione electron **potrebbe accedere al dispositivo** tramite le API di Node, anche se può essere configurata per prevenirlo:
 | 
			
		||||
L'applicazione Electron **può accedere al dispositivo** tramite le API di Node, anche se può essere configurata per prevenirlo:
 | 
			
		||||
 | 
			
		||||
- **`nodeIntegration`** - è `off` per impostazione predefinita. Se attivato, consente di accedere alle funzionalità di Node dal renderer process.
 | 
			
		||||
- **`contextIsolation`** - è `on` per impostazione predefinita. Se disattivato, i processi principale e renderer non sono isolati.
 | 
			
		||||
- **`contextIsolation`** - è `on` per impostazione predefinita. Se disattivato, i processi main e renderer non sono isolati.
 | 
			
		||||
- **`preload`** - vuoto per impostazione predefinita.
 | 
			
		||||
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - è disattivato per impostazione predefinita. Restringerà le azioni che NodeJS può eseguire.
 | 
			
		||||
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - è disattivato per impostazione predefinita. Restriggerà le azioni che NodeJS può eseguire.
 | 
			
		||||
- Integrazione di Node nei Workers
 | 
			
		||||
- **`nodeIntegrationInSubframes`** - è `off` per impostazione predefinita.
 | 
			
		||||
- Se **`nodeIntegration`** è **abilitato**, questo consentirebbe l'uso delle **API di Node.js** nelle pagine web che sono **caricate in iframe** all'interno di un'applicazione Electron.
 | 
			
		||||
@ -95,7 +95,7 @@ onerror="alert(require('child_process').execSync('ls -l').toString());" />
 | 
			
		||||
src="x"
 | 
			
		||||
onerror="alert(require('child_process').execSync('uname -a').toString());" />
 | 
			
		||||
```
 | 
			
		||||
### Cattura del traffico
 | 
			
		||||
### Cattura traffico
 | 
			
		||||
 | 
			
		||||
Modifica la configurazione start-main e aggiungi l'uso di un proxy come:
 | 
			
		||||
```javascript
 | 
			
		||||
@ -111,7 +111,7 @@ Se puoi eseguire localmente un'app Electron, è possibile che tu possa farla ese
 | 
			
		||||
 | 
			
		||||
## RCE: XSS + nodeIntegration
 | 
			
		||||
 | 
			
		||||
Se **nodeIntegration** è impostato su **on**, il JavaScript di una pagina web può utilizzare facilmente le funzionalità di Node.js semplicemente chiamando `require()`. Ad esempio, il modo per eseguire l'applicazione calcolatrice su Windows è:
 | 
			
		||||
Se **nodeIntegration** è impostato su **on**, il JavaScript di una pagina web può utilizzare facilmente le funzionalità di Node.js semplicemente chiamando `require()`. Ad esempio, il modo per eseguire l'applicazione calc su Windows è:
 | 
			
		||||
```html
 | 
			
		||||
<script>
 | 
			
		||||
require("child_process").exec("calc")
 | 
			
		||||
@ -224,7 +224,7 @@ window.open(
 | 
			
		||||
)
 | 
			
		||||
</script>
 | 
			
		||||
```
 | 
			
		||||
## Lettura di file interni: XSS + contextIsolation
 | 
			
		||||
## Lettura di File Interni: XSS + contextIsolation
 | 
			
		||||
 | 
			
		||||
**Disabilitare `contextIsolation` consente l'uso di `<webview>` tags**, simile a `<iframe>`, per leggere ed esfiltrare file locali. Un esempio fornito dimostra come sfruttare questa vulnerabilità per leggere il contenuto di file interni:
 | 
			
		||||
 | 
			
		||||
@ -295,7 +295,7 @@ Quindi, il processo di rendering può importare oggetti dal modulo come:
 | 
			
		||||
```javascript
 | 
			
		||||
import { dialog, getCurrentWindow } from '@electron/remote'
 | 
			
		||||
```
 | 
			
		||||
Il **[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** indica alcune interessanti **funzioni** esposte dall'oggetto **`app`** del modulo remoto:
 | 
			
		||||
Il **[post del blog](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** indica alcune interessanti **funzioni** esposte dall'oggetto **`app`** del modulo remoto:
 | 
			
		||||
 | 
			
		||||
- **`app.relaunch([options])`**
 | 
			
		||||
- **Riavvia** l'applicazione **uscendo** dall'istanza corrente e **lanciando** una nuova. Utile per **aggiornamenti dell'app** o significativi **cambiamenti di stato**.
 | 
			
		||||
@ -338,11 +338,11 @@ console.log('Recent Places:', recentPlaces);
 | 
			
		||||
 | 
			
		||||
* **Ascolta** le **notifiche native macOS** utilizzando NSDistributedNotificationCenter.
 | 
			
		||||
* Prima di **macOS Catalina**, potevi sniffare **tutte** le notifiche distribuite passando **nil** a CFNotificationCenterAddObserver.
 | 
			
		||||
* Dopo **Catalina / Big Sur**, le app sandboxed possono ancora **iscriversi** a **molti eventi** (ad esempio, **blocco/sblocco dello schermo**, **montaggi di volume**, **attività di rete**, ecc.) registrando le notifiche **per nome**.
 | 
			
		||||
* Dopo **Catalina / Big Sur**, le app sandboxed possono ancora **iscriversi** a **molti eventi** (ad esempio, **blocco/sblocco dello schermo**, **montaggio del volume**, **attività di rete**, ecc.) registrando le notifiche **per nome**.
 | 
			
		||||
 | 
			
		||||
### **getUserDefault / setUserDefault**
 | 
			
		||||
 | 
			
		||||
* **Interagisce** con **NSUserDefaults**, che memorizza le **preferenze** dell'**applicazione** o **globali** su macOS.
 | 
			
		||||
* **Interfaccia** con **NSUserDefaults**, che memorizza le **preferenze** dell'**applicazione** o **globali** su macOS.
 | 
			
		||||
 | 
			
		||||
* **getUserDefault** può **recuperare** informazioni sensibili, come **posizioni di file recenti** o **posizione geografica dell'utente**.
 | 
			
		||||
 | 
			
		||||
@ -356,6 +356,19 @@ Questa funzione mostra il file dato in un gestore di file, che **potrebbe esegui
 | 
			
		||||
 | 
			
		||||
Per ulteriori informazioni controlla [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
 | 
			
		||||
 | 
			
		||||
Le app Electron dovrebbero avere una **Content Security Policy (CSP)** per **prevenire attacchi XSS**. La **CSP** è uno **standard di sicurezza** che aiuta a **prevenire** l'**esecuzione** di **codice non attendibile** nel browser.
 | 
			
		||||
 | 
			
		||||
Di solito è **configurata** nel file **`main.js`** o nel template **`index.html`** con la CSP all'interno di un **meta tag**.
 | 
			
		||||
 | 
			
		||||
Per ulteriori informazioni controlla:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
pentesting-web/content-security-policy-csp-bypass/
 | 
			
		||||
{{#endref}}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## **Tools**
 | 
			
		||||
 | 
			
		||||
- [**Electronegativity**](https://github.com/doyensec/electronegativity) è uno strumento per identificare misconfigurazioni e anti-pattern di sicurezza nelle applicazioni basate su Electron.
 | 
			
		||||
@ -367,7 +380,7 @@ Per ulteriori informazioni controlla [https://blog.doyensec.com/2021/02/16/elect
 | 
			
		||||
 | 
			
		||||
In [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) puoi trovare un laboratorio per sfruttare app Electron vulnerabili.
 | 
			
		||||
 | 
			
		||||
Alcuni comandi che ti aiuteranno con il laboratorio:
 | 
			
		||||
Al alcuni comandi che ti aiuteranno con il laboratorio:
 | 
			
		||||
```bash
 | 
			
		||||
# Download apps from these URls
 | 
			
		||||
# Vuln to nodeIntegration
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user