# RCE de Electron contextIsolation a través de código de precarga
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 - ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! - Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) - Consigue el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com) - **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** - **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
## 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 ser utilizado para ejecutar una calculadora, pero `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 de página arbitraria: ```html ``` Como la llamada a `SAFE_PROTOCOLS.indexOf` siempre devolverá 1337, el atacante puede saltarse la protección y ejecutar la calculadora. Exploit final: ```html CLICK ``` Revisa las diapositivas originales para otras formas de ejecutar programas sin tener una ventana emergente que solicite permisos. Aparentemente, otra forma de cargar y ejecutar código es accediendo a algo como `file://127.0.0.1/electron/rce.jar`. ## Ejemplo 2: RCE en la aplicación Discord 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, encontré que Discord expone la función, que permite llamar a algunos módulos permitidos a través de `DiscordNative.nativeModules.requireModule('NOMBRE-DEL-MÓDULO')`, en la página web.\ Aquí, no pude usar módulos que se pueden usar para RCE directamente, como el módulo _child\_process_, pero **encontré un código donde se puede lograr RCE mediante la anulación de 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 **anulo `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 librería "_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 está especificado en la variable `nvidiaSmiPath`, sin embargo, debido a la anulación de `RegExp.prototype.test` y `Array.prototype.join`, **el argumento es reemplazado por "**_**calc**_**" en el procesamiento interno de \_execa**\_**. Específicamente, el argumento es reemplazado 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)
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 - ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! - Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) - Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com) - **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** - **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.