Electron contextIsolation RCE via preload code
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:
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:
Ü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.
Die getGPUDriverVersions
Funktion versucht, das Programm mithilfe der "execa"-Bibliothek auszuführen, wie folgt:
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.
Last updated