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 6c6e7f1d3..71ec27c03 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 @@ -1,4 +1,4 @@ -# Aplicaciones de Escritorio Electron +# Electron Desktop Apps {{#include ../../../banners/hacktricks-training.md}} @@ -32,7 +32,7 @@ let win = new BrowserWindow() //Open Renderer Process 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: @@ -95,9 +95,9 @@ onerror="alert(require('child_process').execSync('ls -l').toString());" /> src="x" 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 "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: -1. Ejecutar **JavaScript arbitrario en el renderizador** (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 -3. **Activar** el uso de la **función sobrescrita** +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 para su propia función +3. **Activar** el uso de **la función sobrescrita** 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: @@ -177,7 +177,7 @@ electron-contextisolation-rce-via-ipc.md ### 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 window.addEventListener('click', (e) => { ``` @@ -278,7 +278,7 @@ El módulo remoto de Electron permite que **los procesos de renderizado accedan > [!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**. -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**: ```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.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. -**Example usage:** +**Ejemplo de uso:** ```javascript const { systemPreferences } = require('electron'); @@ -342,7 +342,7 @@ console.log('Recent Places:', recentPlaces); ### **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**. @@ -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**. -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** - [**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. - [**Electro.ng**](https://electro.ng/): Necesitas comprarlo. ## 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: ```bash