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
c080d49d14
commit
f2be8f2bf0
@ -1,4 +1,4 @@
|
||||
# Electron Desktop Apps
|
||||
# Aplicaciones de Escritorio Electron
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -32,7 +32,7 @@ let win = new BrowserWindow()
|
||||
//Open Renderer Process
|
||||
win.loadURL(`file://path/to/index.html`)
|
||||
```
|
||||
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**.
|
||||
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 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());" />
|
||||
```
|
||||
### Captura de tráfico
|
||||
### Capturar tráfico
|
||||
|
||||
Modifica la configuración de start-main y añade el uso de un proxy como:
|
||||
Modifique la configuración de start-main y agregue el uso de un proxy como:
|
||||
```javascript
|
||||
"start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors",
|
||||
```
|
||||
@ -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 normal.
|
||||
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.
|
||||
```javascript
|
||||
window.addEventListener('click', (e) => {
|
||||
```
|
||||
@ -260,9 +260,9 @@ Primero que nada, necesitas saber qué sucede cuando intentas abrir una nueva UR
|
||||
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)
|
||||
```
|
||||
La llamada a **`openInternally`** decidirá si el **link** se **abrirá** en la **ventana de escritorio** ya que es un enlace que pertenece a la plataforma, **o** si se abrirá en el **navegador como un recurso de 3ra parte**.
|
||||
La llamada a **`openInternally`** decidirá si el **link** se **abrirá** en la **ventana de escritorio** ya que es un enlace que pertenece a la plataforma, **o** si se abrirá en el **navegador como un recurso de terceros**.
|
||||
|
||||
En el caso de que la **regex** utilizada por la función sea **vulnerable a bypasses** (por ejemplo, al **no escapar los puntos de los subdominios**), un atacante podría abusar del XSS para **abrir una nueva ventana que** estará ubicada en la infraestructura del atacante **pidiendo credenciales** al usuario:
|
||||
En el caso de que la **regex** utilizada por la función sea **vulnerable a bypasses** (por ejemplo, **no escapando los puntos de los subdominios**), un atacante podría abusar del XSS para **abrir una nueva ventana que** estará ubicada en la infraestructura del atacante **pidiendo credenciales** al usuario:
|
||||
```html
|
||||
<script>
|
||||
window.open("<http://subdomainagoogleq.com/index.html>")
|
||||
@ -270,7 +270,7 @@ window.open("<http://subdomainagoogleq.com/index.html>")
|
||||
```
|
||||
## Módulo remoto
|
||||
|
||||
El módulo Remote de Electron permite que **los procesos de renderizado accedan a las API del proceso principal**, facilitando la comunicación dentro de una aplicación Electron. Sin embargo, habilitar este módulo introduce riesgos de seguridad significativos. Amplía la superficie de ataque de la aplicación, haciéndola más susceptible a vulnerabilidades como ataques de scripting entre sitios (XSS).
|
||||
El módulo remoto de Electron permite que **los procesos de renderizado accedan a las API del proceso principal**, facilitando la comunicación dentro de una aplicación Electron. Sin embargo, habilitar este módulo introduce riesgos de seguridad significativos. Amplía la superficie de ataque de la aplicación, haciéndola más susceptible a vulnerabilidades como ataques de scripting entre sitios (XSS).
|
||||
|
||||
> [!TIP]
|
||||
> Aunque el módulo **remote** expone algunas API del proceso principal a los procesos de renderizado, no es sencillo obtener RCE solo abusando de los componentes. Sin embargo, los componentes pueden exponer información sensible.
|
||||
@ -278,7 +278,7 @@ El módulo Remote 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 puede ser habilitado en varios pasos, ya que por razones de seguridad y rendimiento 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, por lo que se **recomienda no usarlo**.
|
||||
|
||||
Para habilitarlo, primero se necesita **habilitarlo en el proceso principal**:
|
||||
```javascript
|
||||
@ -312,16 +312,16 @@ El **[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
|
||||
- **`app.setJumpList(categories)`**
|
||||
- **Establece** o **elimina** una **Jump List personalizada** en **Windows**. Puedes especificar **categorías** para organizar cómo aparecen las tareas al usuario.
|
||||
- **`app.setLoginItemSettings(settings)`**
|
||||
- **Configura** qué **ejecutables** se inician al **iniciar sesión** junto con sus **opciones** (solo macOS y Windows).
|
||||
- **Configura** qué **ejecutables** se lanzan al **iniciar sesión** junto con sus **opciones** (solo macOS y Windows).
|
||||
```javascript
|
||||
Native.app.relaunch({args: [], execPath: "/System/Applications/Calculator.app/Contents/MacOS/Calculator"});
|
||||
Native.app.exit()
|
||||
```
|
||||
## module systemPreferences
|
||||
## systemPreferences module
|
||||
|
||||
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.
|
||||
|
||||
**Ejemplo de uso:**
|
||||
**Example usage:**
|
||||
```javascript
|
||||
const { systemPreferences } = require('electron');
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user