Electron contextIsolation RCE via preload code
Last updated
Last updated
Ce code ouvre des liens http(s) avec le navigateur par défaut :
Quelque chose comme file:///C:/Windows/systemd32/calc.exe
pourrait être utilisé pour exécuter une calculatrice, le SAFE_PROTOCOLS.indexOf
l'en empêche.
Par conséquent, un attaquant pourrait injecter ce code JS via XSS ou une navigation de page arbitraire :
Comme l'appel à SAFE_PROTOCOLS.indexOf
renverra toujours 1337, l'attaquant peut contourner la protection et exécuter la calc. Exploit final:
Consultez les diapositives originales pour d'autres façons d'exécuter des programmes sans avoir de demande de permissions.
Apparemment, une autre façon de charger et d'exécuter du code est d'accéder à quelque chose comme file://127.0.0.1/electron/rce.jar
Exemple provenant de https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1
En vérifiant les scripts de préchargement, j'ai découvert que Discord expose la fonction, qui permet à certains modules autorisés d'être appelés via DiscordNative.nativeModules.requireModule('MODULE-NAME')
, dans la page web.
Ici, je n'ai pas pu utiliser des modules qui peuvent être utilisés pour RCE directement, tels que le module child_process, mais j'ai trouvé un code où RCE peut être réalisé en remplaçant les méthodes JavaScript intégrées et en interférant avec l'exécution du module exposé.
Voici la preuve de concept. J'ai pu confirmer que l'application calc s'est affichée lorsque j'ai appelé la fonction getGPUDriverVersions
qui est définie dans le module appelé "discord_utils" depuis devTools, tout en remplaçant les RegExp.prototype.test
et Array.prototype.join
.
La fonction getGPUDriverVersions
tente d'exécuter le programme en utilisant la bibliothèque "execa", comme suit :
Généralement, execa tente d'exécuter "nvidia-smi.exe", spécifié dans la variable nvidiaSmiPath
, cependant, en raison du RegExp.prototype.test
et Array.prototype.join
remplacés, l'argument est remplacé par "calc" dans le traitement interne de _execa_**.
Plus précisément, l'argument est remplacé en modifiant les deux parties suivantes.