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
f2be8f2bf0
commit
cc64acd4f6
@ -1,4 +1,4 @@
|
|||||||
# Aplicaciones de Escritorio Electron
|
# Electron Desktop Apps
|
||||||
|
|
||||||
{{#include ../../../banners/hacktricks-training.md}}
|
{{#include ../../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
@ -32,7 +32,7 @@ let win = new BrowserWindow()
|
|||||||
//Open Renderer Process
|
//Open Renderer Process
|
||||||
win.loadURL(`file://path/to/index.html`)
|
win.loadURL(`file://path/to/index.html`)
|
||||||
```
|
```
|
||||||
Los ajustes del **proceso de renderizado** se pueden **configurar** en el **proceso principal** dentro del archivo main.js. Algunas de las configuraciones **prevenirán que la aplicación Electron obtenga RCE** u otras vulnerabilidades si los **ajustes están correctamente configurados**.
|
La configuración del **proceso de renderizado** se puede **configurar** en el **proceso principal** dentro del archivo main.js. Algunas de las configuraciones **prevenirán que la aplicación Electron obtenga RCE** u otras vulnerabilidades si las **configuraciones están correctamente establecidas**.
|
||||||
|
|
||||||
La aplicación Electron **podría acceder al dispositivo** a través de las APIs de Node, aunque se puede configurar para prevenirlo:
|
La aplicación Electron **podría acceder al dispositivo** a través de las APIs de Node, aunque se puede configurar para prevenirlo:
|
||||||
|
|
||||||
@ -95,9 +95,9 @@ onerror="alert(require('child_process').execSync('ls -l').toString());" />
|
|||||||
src="x"
|
src="x"
|
||||||
onerror="alert(require('child_process').execSync('uname -a').toString());" />
|
onerror="alert(require('child_process').execSync('uname -a').toString());" />
|
||||||
```
|
```
|
||||||
### Capturar tráfico
|
### Captura de tráfico
|
||||||
|
|
||||||
Modifique la configuración de start-main y agregue el uso de un proxy como:
|
Modifica la configuración de start-main y añade el uso de un proxy como:
|
||||||
```javascript
|
```javascript
|
||||||
"start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors",
|
"start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors",
|
||||||
```
|
```
|
||||||
@ -156,9 +156,9 @@ El _**contextIsolation**_ introduce **contextos separados entre los scripts de l
|
|||||||
|
|
||||||
Si los contextos no están aislados, un atacante puede:
|
Si los contextos no están aislados, un atacante puede:
|
||||||
|
|
||||||
1. Ejecutar **JavaScript arbitrario en el renderizador** (XSS o navegación a sitios externos)
|
1. Ejecutar **JavaScript arbitrario en el renderer** (XSS o navegación a sitios externos)
|
||||||
2. **Sobrescribir el método incorporado** que se utiliza en el preload o en el código interno de Electron a una función propia
|
2. **Sobrescribir el método incorporado** que se utiliza en el preload o en el código interno de Electron para su propia función
|
||||||
3. **Activar** el uso de la **función sobrescrita**
|
3. **Activar** el uso de **la función sobrescrita**
|
||||||
4. ¿RCE?
|
4. ¿RCE?
|
||||||
|
|
||||||
Hay 2 lugares donde los métodos incorporados pueden ser sobrescritos: En el código de preload o en el código interno de Electron:
|
Hay 2 lugares donde los métodos incorporados pueden ser sobrescritos: En el código de preload o en el código interno de Electron:
|
||||||
@ -177,7 +177,7 @@ electron-contextisolation-rce-via-ipc.md
|
|||||||
|
|
||||||
### Bypass del evento de clic
|
### Bypass del evento de clic
|
||||||
|
|
||||||
Si hay restricciones aplicadas al hacer clic en un enlace, es posible que puedas eludirlas **haciendo un clic medio** en lugar de un clic izquierdo regular.
|
Si hay restricciones aplicadas al hacer clic en un enlace, es posible que puedas eludirlas **haciendo un clic medio** en lugar de un clic izquierdo normal.
|
||||||
```javascript
|
```javascript
|
||||||
window.addEventListener('click', (e) => {
|
window.addEventListener('click', (e) => {
|
||||||
```
|
```
|
||||||
@ -278,7 +278,7 @@ El módulo remoto de Electron permite que **los procesos de renderizado accedan
|
|||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Muchas aplicaciones que aún utilizan el módulo remoto lo hacen de una manera que **requiere que NodeIntegration esté habilitado** en el proceso de renderizado, lo cual es un **enorme riesgo de seguridad**.
|
> Muchas aplicaciones que aún utilizan el módulo remoto lo hacen de una manera que **requiere que NodeIntegration esté habilitado** en el proceso de renderizado, lo cual es un **enorme riesgo de seguridad**.
|
||||||
|
|
||||||
Desde Electron 14, el módulo `remote` de Electron podría habilitarse en varios pasos debido a razones de seguridad y rendimiento, por lo que se **recomienda no usarlo**.
|
Desde Electron 14, el módulo `remote` de Electron podría habilitarse en varios pasos debido a razones de seguridad y rendimiento, es **recomendado no usarlo**.
|
||||||
|
|
||||||
Para habilitarlo, primero se necesita **habilitarlo en el proceso principal**:
|
Para habilitarlo, primero se necesita **habilitarlo en el proceso principal**:
|
||||||
```javascript
|
```javascript
|
||||||
@ -317,11 +317,11 @@ El **[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
|
|||||||
Native.app.relaunch({args: [], execPath: "/System/Applications/Calculator.app/Contents/MacOS/Calculator"});
|
Native.app.relaunch({args: [], execPath: "/System/Applications/Calculator.app/Contents/MacOS/Calculator"});
|
||||||
Native.app.exit()
|
Native.app.exit()
|
||||||
```
|
```
|
||||||
## systemPreferences module
|
## module systemPreferences
|
||||||
|
|
||||||
La **API principal** para acceder a las preferencias del sistema y **emitir eventos del sistema** en Electron. Métodos como **subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault** y **setUserDefault** son todos **parte de** este módulo.
|
La **API principal** para acceder a las preferencias del sistema y **emitir eventos del sistema** en Electron. Métodos como **subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault** y **setUserDefault** son todos **parte de** este módulo.
|
||||||
|
|
||||||
**Example usage:**
|
**Ejemplo de uso:**
|
||||||
```javascript
|
```javascript
|
||||||
const { systemPreferences } = require('electron');
|
const { systemPreferences } = require('electron');
|
||||||
|
|
||||||
@ -342,7 +342,7 @@ console.log('Recent Places:', recentPlaces);
|
|||||||
|
|
||||||
### **getUserDefault / setUserDefault**
|
### **getUserDefault / setUserDefault**
|
||||||
|
|
||||||
* **Interfaz** con **NSUserDefaults**, que almacena **preferencias** de **aplicación** o **globales** en macOS.
|
* **Interfaz** con **NSUserDefaults**, que almacena preferencias **de aplicación** o **globales** en macOS.
|
||||||
|
|
||||||
* **getUserDefault** puede **recuperar** información sensible, como **ubicaciones de archivos recientes** o **ubicación geográfica del usuario**.
|
* **getUserDefault** puede **recuperar** información sensible, como **ubicaciones de archivos recientes** o **ubicación geográfica del usuario**.
|
||||||
|
|
||||||
@ -354,18 +354,30 @@ console.log('Recent Places:', recentPlaces);
|
|||||||
|
|
||||||
Esta función muestra el archivo dado en un administrador de archivos, lo que **podría ejecutar automáticamente el archivo**.
|
Esta función muestra el archivo dado en un administrador de archivos, lo que **podría ejecutar automáticamente el archivo**.
|
||||||
|
|
||||||
Para más información, consulta [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
|
Para más información consulta [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
|
||||||
|
|
||||||
|
Las aplicaciones de Electron deben tener una **Política de Seguridad de Contenido (CSP)** para **prevenir ataques XSS**. La **CSP** es un **estándar de seguridad** que ayuda a **prevenir** la **ejecución** de **código no confiable** en el navegador.
|
||||||
|
|
||||||
|
Generalmente se **configura** en el archivo **`main.js`** o en la plantilla **`index.html`** con la CSP dentro de una **etiqueta meta**.
|
||||||
|
|
||||||
|
Para más información consulta:
|
||||||
|
|
||||||
|
{{#ref}}
|
||||||
|
pentesting-web/content-security-policy-csp-bypass/
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
## **Tools**
|
## **Tools**
|
||||||
|
|
||||||
- [**Electronegativity**](https://github.com/doyensec/electronegativity) es una herramienta para identificar configuraciones incorrectas y patrones de seguridad en aplicaciones basadas en Electron.
|
- [**Electronegativity**](https://github.com/doyensec/electronegativity) es una herramienta para identificar configuraciones incorrectas y patrones de seguridad en aplicaciones basadas en Electron.
|
||||||
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) es un plugin de código abierto para VS Code para aplicaciones Electron que utiliza Electronegativity.
|
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) es un plugin de código abierto para VS Code para aplicaciones de Electron que utiliza Electronegativity.
|
||||||
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) para verificar bibliotecas de terceros vulnerables.
|
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) para verificar bibliotecas de terceros vulnerables.
|
||||||
- [**Electro.ng**](https://electro.ng/): Necesitas comprarlo.
|
- [**Electro.ng**](https://electro.ng/): Necesitas comprarlo.
|
||||||
|
|
||||||
## Labs
|
## Labs
|
||||||
|
|
||||||
En [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) puedes encontrar un laboratorio para explotar aplicaciones Electron vulnerables.
|
En [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) puedes encontrar un laboratorio para explotar aplicaciones vulnerables de Electron.
|
||||||
|
|
||||||
Algunos comandos que te ayudarán con el laboratorio:
|
Algunos comandos que te ayudarán con el laboratorio:
|
||||||
```bash
|
```bash
|
||||||
|
Loading…
x
Reference in New Issue
Block a user