Electron contextIsolation RCE via preload code
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Example from https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=30
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:
SAFE_PROTOCOLS.indexOf
çağrısı her zaman 1337 döndüreceğinden, saldırgan korumayı atlayabilir ve calc'i çalıştırabilir. Son istismar:
Check the original slides for other ways to execute programs without having a prompt asking for permissions.
Apparently another way to load and execute code is to access something like file://127.0.0.1/electron/rce.jar
Example from https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1
Preload scriptlerini kontrol ederken, Discord'un bazı izin verilen modüllerin DiscordNative.nativeModules.requireModule('MODULE-NAME')
aracılığıyla çağrılmasına izin veren bir fonksiyonu 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 açıldığını doğrulayabildim, bu, RegExp.prototype.test
ve Array.prototype.join
yöntemlerini geçersiz kılarken, devTools'tan "discord_utils" adlı modülde tanımlanan getGPUDriverVersions
fonksiyonunu çağırdığımda gerçekleşti.
getGPUDriverVersions
fonksiyonu, programı "execa" kütüphanesini kullanarak çalıştırmaya çalışır, aşağıdaki gibi:
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.
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)