From 70e7e640da326de63d634fdb10e848f83719b028 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 29 Sep 2025 21:55:30 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/pentesting-web/electron-des --- .../electron-desktop-apps/README.md | 232 ++++++++++-------- 1 file changed, 129 insertions(+), 103 deletions(-) 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 69e0cd0b7..d9acfbce8 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,17 +1,17 @@ -# Aplicaciones de escritorio de Electron +# Electron Desktop Apps {{#include ../../../banners/hacktricks-training.md}} ## Introducción -Electron combina un backend local (con **NodeJS**) y un frontend (**Chromium**), aunque carece de algunos mecanismos de seguridad de los navegadores modernos. +Electron combina un backend local (con **NodeJS**) y un frontend (**Chromium**), aunque carece de algunos de los mecanismos de seguridad de los navegadores modernos. -Normalmente puedes encontrar el código de la aplicación Electron dentro de un archivo `.asar`; para obtener el código necesitas extraerlo: +Normalmente puedes encontrar el código de la aplicación Electron dentro de una aplicación `.asar`; para obtener el código necesitas extraerla: ```bash npx asar extract app.asar destfolder #Extract everything npx asar extract-file app.asar main.js #Extract just a file ``` -En el código fuente de una app Electron, dentro de `packet.json`, puedes encontrar especificado el archivo `main.js` donde se establecen los ajustes de seguridad. +En el código fuente de una Electron app, dentro de `packet.json`, puedes encontrar especificado el archivo `main.js` donde se establecen las configuraciones de seguridad. ```json { "name": "standard-notes", @@ -19,12 +19,12 @@ En el código fuente de una app Electron, dentro de `packet.json`, puedes encont ``` Electron tiene 2 tipos de procesos: -- Proceso principal (tiene acceso completo a NodeJS) -- Proceso de renderizado (debería tener acceso a NodeJS restringido por razones de seguridad) +- Main Process (tiene acceso completo a NodeJS) +- Renderer Process (debería tener acceso a NodeJS restringido por razones de seguridad) ![](<../../../images/image (182).png>) -Un **proceso de renderizado** será una ventana del navegador que carga un archivo: +Un **renderer process** será una ventana del navegador que carga un archivo: ```javascript const { BrowserWindow } = require("electron") let win = new BrowserWindow() @@ -32,17 +32,17 @@ 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 **evitarán que la aplicación Electron obtenga RCE** u otras vulnerabilidades si los **ajustes están correctamente configurados**. +Los ajustes del **renderer process** pueden ser **configurados** en el **main process** dentro del archivo main.js. Algunas de las configuraciones **impidirá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 puede configurarse para evitarlo: +La aplicación Electron **podría acceder al dispositivo** vía Node APIs aunque puede configurarse para evitarlo: -- **`nodeIntegration`** - está `off` por defecto. Si está `on`, permite acceder a las funciones de Node desde el proceso de renderizado. -- **`contextIsolation`** - está `on` por defecto. Si está `off`, el proceso principal y el de renderizado no están aislados. -- **`preload`** - vacío por defecto. -- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - está `off` por defecto. Restringirá las acciones que NodeJS puede realizar. -- Integración de Node en Workers -- **`nodeIntegrationInSubframes`** - está `off` por defecto. -- Si **`nodeIntegration`** está **habilitado**, esto permitiría el uso de las **APIs de Node.js** en páginas web que se **cargan en iframes** dentro de una aplicación Electron. +- **`nodeIntegration`** - is `off` by default. If on, allows to access node features from the renderer process. +- **`contextIsolation`** - is `on` by default. If off, main and renderer processes aren't isolated. +- **`preload`** - empty by default. +- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - is off by default. It will restrict the actions NodeJS can perform. +- Node Integration in Workers +- **`nodeIntegrationInSubframes`**- is `off` by default. +- Si **`nodeIntegration`** está **habilitado**, esto permitiría el uso de las **Node.js APIs** en páginas web que se **cargan en iframes** dentro de una aplicación Electron. - Si **`nodeIntegration`** está **deshabilitado**, entonces los preloads se cargarán en el iframe Ejemplo de configuración: @@ -97,13 +97,13 @@ onerror="alert(require('child_process').execSync('uname -a').toString());" /> ``` ### Capturar tráfico -Modifica la configuración start-main y añade 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", ``` ## Electron Local Code Injection -Si puedes ejecutar localmente una Electron App, es posible que puedas hacer que ejecute código JavaScript arbitrario. Consulta cómo en: +Si puedes ejecutar localmente una Electron App, es posible que puedas hacer que ejecute código javascript arbitrario. Consulta cómo en: {{#ref}} @@ -112,7 +112,7 @@ Si puedes ejecutar localmente una Electron App, es posible que puedas hacer que ## RCE: XSS + nodeIntegration -Si la **nodeIntegration** está configurada en **on**, el JavaScript de una página web puede usar características de Node.js fácilmente simplemente llamando a `require()`. Por ejemplo, la forma de ejecutar la aplicación calc en Windows es: +Si la **nodeIntegration** está en **on**, el JavaScript de una página web puede usar las funcionalidades de Node.js fácilmente simplemente llamando a `require()`. Por ejemplo, la manera de ejecutar la aplicación calc en Windows es: ```html