Electron Desktop Apps
WhiteIntel, karanlık ağ destekli bir arama motorudur ve şirketin veya müşterilerinin hırsız kötü amaçlı yazılımlar tarafından kompromize edilip edilmediğini kontrol etmek için ücretsiz işlevler sunar.
WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.
Websitesini ziyaret edebilir ve motorlarını ücretsiz deneyebilirsiniz:
Giriş
Electron, yerel bir arka uç (ile NodeJS) ve bir ön uç (Chromium) birleştirir, ancak modern tarayıcıların güvenlik mekanizmalarından bazılarını eksiktir.
Genellikle electron uygulama kodunu bir .asar
uygulamasının içinde bulabilirsiniz, kodu elde etmek için onu çıkartmanız gerekir:
Electron uygulamasının kaynak kodunda, packet.json
dosyasının içinde güvenlik yapılandırmalarının belirtildiği main.js
dosyasını bulabilirsiniz.
Electron'un 2 işlem türü vardır:
Ana İşlem (NodeJS'e tam erişime sahiptir)
Oluşturucu İşlem (güvenlik nedenleriyle NodeJS erişimi kısıtlanmış olmalıdır)
Bir oluşturucu işlemi, bir dosya yükleyen bir tarayıcı penceresi olacaktır:
Renderer işleminin ayarları, main.js dosyası içinde ana işlemde ayarlanabilir. Bazı yapılandırmalar, ayarlar doğru bir şekilde yapılandırıldığında, Electron uygulamasının RCE almasını veya diğer güvenlik açıklarını önleyebilir.
Elektron uygulaması, Node API'leri aracılığıyla cihaza erişebilir ancak bunu engellemek için yapılandırılabilir:
nodeIntegration
- varsayılan olarakkapalı
dır. Açık olduğunda, renderer işleminden node özelliklerine erişime izin verir.contextIsolation
- varsayılan olarakaçık
tır. Kapalı olduğunda, ana ve renderer işlemleri izole edilmez.preload
- varsayılan olarak boştur.sandbox
- varsayılan olarak kapalıdır. NodeJS'nin gerçekleştirebileceği eylemleri kısıtlayacaktır.İşçilerde Node Entegrasyonu
nodeIntegrationInSubframes
- varsayılan olarakkapalı
dır.Eğer
nodeIntegration
etkinse, bu, Electron uygulaması içindeki iframlarda yüklenen web sayfalarında Node.js API'lerinin kullanılmasına izin verecektir.Eğer
nodeIntegration
devre dışı bırakılmışsa, preload'lar iframda yüklenecektir
Yapılandırma örneği:
İşte buradan bazı RCE yükleri:
Trafik Yakalama
Başlangıç ana yapılandırmasını değiştirin ve şu gibi bir proxy kullanımını ekleyin:
Electron Yerel Kod Enjeksiyonu
Bir Electron Uygulamasını yerel olarak çalıştırabiliyorsanız, bu durumda keyfi JavaScript kodunu çalıştırabilirsiniz. Nasıl yapılacağını kontrol edin:
pagemacOS Electron Applications InjectionUzaktan Kod Çalıştırma (RCE): XSS + nodeIntegration
Eğer nodeIntegration değeri on olarak ayarlanmışsa, bir web sayfasının JavaScript'i require()
fonksiyonunu çağırarak Node.js özelliklerini kolayca kullanabilir. Örneğin, Windows üzerinde hesap makinesini çalıştırmak için:
RCE: preload
Bu ayarlar içinde belirtilen betik, diğer betiklerden önce yüklenir, bu nedenle Node API'lerine sınırsız erişime sahiptir:
Bu nedenle, betik node özelliklerini sayfalara dışa aktarabilir:
Eğer contextIsolation
açıksa, bu çalışmayabilir
Uzaktan Kod Çalıştırma: XSS + contextIsolation
contextIsolation, web sayfası betikleri ile JavaScript Electron'un dahili kodları arasında ayrı bağlamlar tanıtarak her kodun JavaScript yürütmesinin birbirini etkilememesini sağlar. Bu, RCE olasılığını ortadan kaldırmak için gerekli bir özelliktir.
Bağlamlar izole edilmediğinde bir saldırgan şunları yapabilir:
Renderer'da keyfi JavaScript yürütmek (XSS veya harici sitelere yönlendirme)
Preload veya Electron dahili kodunda kullanılan dahili yöntemi üzerine yazmak
Üzerine yazılan fonksiyonun tetiklenmesi
RCE?
Dahili yöntemlerin üzerine yazılabileceği 2 yer vardır: Preload kodunda veya Electron dahili kodunda:
pageElectron contextIsolation RCE via preload codepageElectron contextIsolation RCE via Electron internal codepageElectron contextIsolation RCE via IPCTıklama etkinini atlatma
Bir bağlantıya tıkladığınızda kısıtlamalar uygulandıysa, bunları atlayabilirsiniz normal sol tıklama yerine orta tıklama yaparak.
shell.openExternal Aracılığıyla Uzaktan Kod Yürütme (RCE)
Bu örnekler hakkında daha fazla bilgi için https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8 ve https://benjamin-altpeter.de/shell-openexternal-dangers/ adreslerini kontrol edebilirsiniz.
Bir Electron masaüstü uygulaması dağıtılırken, nodeIntegration
ve contextIsolation
için doğru ayarların yapılması hayati önem taşır. Bu ayarların mevcut olmasıyla, ana işlemdeki preload betiklerine veya Electron'un yerel koduna yönelik istemci tarafından uzaktan kod yürütme (RCE) etkili bir şekilde engellenir.
Kullanıcının bağlantılara etkileşimde bulunması veya yeni pencereler açması durumunda, uygulamanın güvenliği ve işlevselliği için önemli olan belirli olay dinleyicileri tetiklenir:
Bu dinleyiciler, masaüstü uygulaması tarafından geçersiz kılınır ve kendi iş mantığını uygulamak için kullanılır. Uygulama, yönlendirilen bir bağlantının dahili olarak mı yoksa harici bir web tarayıcısında mı açılması gerektiğini değerlendirir. Bu karar genellikle openInternally
işlevi aracılığıyla yapılır. Bu işlev false
döndürürse, bağlantının shell.openExternal
işlevini kullanarak harici olarak açılması gerektiğini gösterir.
İşte basitleştirilmiş bir yalancı kod:
Electron JS güvenlik en iyi uygulamaları, openExternal
işlevi ile güvensiz içeriği kabul etmemeyi önerir, çünkü bu çeşitli protokoller aracılığıyla RCE'ye yol açabilir. İşletim sistemleri, RCE'ye neden olabilecek farklı protokolleri destekler. Bu konuda detaylı örnekler ve daha fazla açıklama için bu kaynağa başvurulabilir; bu kaynak, bu zafiyeti sömürebilen Windows protokol örneklerini içerir.
Windows protokolü zafiyet örnekleri şunları içerir:
Dahili Dosyaları Okuma: XSS + contextIsolation
contextIsolation
devre dışı bırakıldığında <webview>
etiketlerinin kullanımına izin verilir, <iframe>
gibi, yerel dosyaları okumak ve dışa aktarmak için. Bir örnek, bu zafiyeti sömürmek için iç dosyaların içeriğini okumayı göstermektedir:
Daha da ileri gidilerek, bir başka yöntemle dahili bir dosyayı okuma paylaşılır ve bir Electron masaüstü uygulamasında kritik bir yerel dosya okuma zafiyeti vurgulanır. Bu, uygulamayı sömürmek ve veri dışa aktarmak için bir betik enjekte etmeyi içerir:
RCE: XSS + Eski Chromium
Uygulama tarafından kullanılan chromium eski ise ve üzerinde bilinen güvenlik açıkları varsa, bir XSS aracılığıyla RCE elde etmek mümkün olabilir. Bir örneği bu makalede görebilirsiniz: https://blog.electrovolt.io/posts/discord-rce/
Dahili URL regex atlatma ile XSS Phishing
Bir XSS bulduysanız ancak RCE tetikleyemez veya dahili dosyaları çalamazsanız, bunu kullanarak kimlik bilgilerini çalmayı deneyebilirsiniz.
Öncelikle, yeni bir URL açmaya çalıştığınızda neler olacağını bilmelisiniz, ön uçtaki JS kodunu kontrol ederek:
openInternally
işlemine yapılan çağrı, bağlantının platforma ait bir bağlantı olup olmadığına karar verecektir, veya tarayıcıda 3. taraf bir kaynak olarak açılacaktır.
Fonksiyon tarafından kullanılan regex'in (örneğin alt alanların noktalarını kaçırmayarak) atlatılabilir olması durumunda, saldırgan XSS'i kullanarak kullanıcıdan kimlik bilgilerini isteyen saldırgan altyapısında yer alan yeni bir pencere açabilir:
Araçlar
Electronegativity, Electron tabanlı uygulamalardaki yanlış yapılandırmaları ve güvenlik karşı desenleri belirlemek için bir araçtır.
Electrolint, Electronegativity kullanan Electron uygulamaları için açık kaynaklı bir VS Code eklentisidir.
nodejsscan, zafiyetli üçüncü taraf kütüphaneleri kontrol etmek için kullanılır.
Electro.ng: Satın almanız gerekmektedir
Labaratuvarlar
Vulnerable Electron uygulamalarını sömürmek için bir labı burada bulabilirsiniz.
Lab ile size yardımcı olacak bazı komutlar:
Referanslar
Electron güvenliği hakkında daha fazla araştırma ve yazılar için https://github.com/doyensec/awesome-electronjs-hacking
WhiteIntel, karanlık ağ destekli bir arama motorudur ve şirketin veya müşterilerinin hırsız kötü amaçlı yazılımlar tarafından kompromize edilip edilmediğini kontrol etmek için ücretsiz işlevler sunar.
WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye saldırılarıyla mücadele etmektir.
Websitesini ziyaret edebilir ve motorlarını ücretsiz deneyebilirsiniz:
Last updated