diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md index 9740cc9ab..91cfeb202 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md @@ -34,7 +34,7 @@ win.loadURL(`file://path/to/index.html`) ``` **renderer process** ayarları **main.js** dosyası içinde **main process**'te **yapılandırılabilir**. Bazı yapılandırmalar, **ayarlar doğru bir şekilde yapılandırıldığında** Electron uygulamasının RCE veya diğer güvenlik açıklarını **önlemesine** yardımcı olacaktır. -Electron uygulaması, Node apileri aracılığıyla **cihazı erişebilir**, ancak bunu önlemek için yapılandırılabilir: +Electron uygulaması, Node API'leri aracılığıyla **cihazı erişebilir**, ancak bunu önlemek için yapılandırılabilir: - **`nodeIntegration`** - varsayılan olarak `kapalıdır`. Açık olduğunda, renderer process'ten node özelliklerine erişime izin verir. - **`contextIsolation`** - varsayılan olarak `açıktır`. Kapalı olduğunda, main ve renderer süreçleri izole edilmez. @@ -42,8 +42,8 @@ Electron uygulaması, Node apileri aracılığıyla **cihazı erişebilir**, anc - [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - varsayılan olarak kapalıdır. NodeJS'in gerçekleştirebileceği eylemleri kısıtlar. - Workers'da Node Entegrasyonu - **`nodeIntegrationInSubframes`** - varsayılan olarak kapalıdır. -- Eğer **`nodeIntegration`** **etkinleştirilirse**, bu, Electron uygulaması içinde **iframe'lerde** yüklü web sayfalarında **Node.js API'lerinin** kullanılmasına izin verir. -- Eğer **`nodeIntegration`** **devre dışı bırakılırsa**, o zaman preloads iframe içinde yüklenecektir. +- Eğer **`nodeIntegration`** **etkinleştirilirse**, bu, Electron uygulaması içindeki iframe'lerde **yüklenen web sayfalarında** **Node.js API'lerinin** kullanılmasına izin verir. +- Eğer **`nodeIntegration`** **devre dışı bırakılırsa**, o zaman preload'lar iframe içinde yüklenir. Yapılandırma örneği: ```javascript @@ -97,7 +97,7 @@ onerror="alert(require('child_process').execSync('uname -a').toString());" /> ``` ### Trafiği Yakala -Başlatma ana yapılandırmasını değiştirin ve aşağıdaki gibi bir proxy kullanın: +Başlangıç-ana yapılandırmasını değiştirin ve aşağıdaki gibi bir proxy kullanın: ```javascript "start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors", ``` @@ -123,7 +123,7 @@ top.require("child_process").exec("open /System/Applications/Calculator.app") ## RCE: preload -Bu ayarda belirtilen script, **renderer'daki diğer scriptlerden önce yüklenir**, bu nedenle **Node API'lerine sınırsız erişime sahiptir**: +Bu ayarda belirtilen script, **renderer'daki diğer scriptlerden önce yüklenir**, bu nedenle **Node API'lerine sınırsız erişimi vardır**: ```javascript new BrowserWindow{ webPreferences: { @@ -177,7 +177,7 @@ electron-contextisolation-rce-via-ipc.md ### Tıklama olayını atlatma -Bir bağlantıya tıkladığınızda kısıtlamalar uygulanıyorsa, bunları **normal bir sol tıklama yerine orta tıklama yaparak** atlatabilirsiniz. +Bir bağlantıya tıkladığınızda kısıtlamalar uygulanıyorsa, bunları **normal sol tıklama yerine orta tıklama yaparak** atlatabilirsiniz. ```javascript window.addEventListener('click', (e) => { ``` @@ -192,7 +192,7 @@ Bir kullanıcı bağlantılarla etkileşime girdiğinde veya yeni pencereler aç webContents.on("new-window", function (event, url, disposition, options) {} webContents.on("will-navigate", function (event, url) {} ``` -Bu dinleyiciler **masaüstü uygulaması tarafından geçersiz kılınır** ve kendi **iş mantığını** uygular. 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` adlı bir fonksiyon aracılığıyla verilir. Bu fonksiyon `false` dönerse, bağlantının harici olarak açılması gerektiğini belirtir ve `shell.openExternal` fonksiyonu kullanılır. +Bu dinleyiciler **masaüstü uygulaması tarafından geçersiz kılınır** ve kendi **iş mantığını** uygular. Uygulama, gidilen 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` fonksiyonu aracılığıyla verilir. Eğer bu fonksiyon `false` dönerse, bağlantının harici olarak açılması gerektiğini belirtir ve `shell.openExternal` fonksiyonu kullanılır. **İşte basitleştirilmiş bir pseudocode:** @@ -200,7 +200,7 @@ Bu dinleyiciler **masaüstü uygulaması tarafından geçersiz kılınır** ve k ![https://miro.medium.com/max/1400/1*ZfgVwT3X1V_UfjcKaAccag.png](<../../../images/image (963).png>) -Electron JS güvenlik en iyi uygulamaları, `openExternal` fonksiyonu ile güvenilmeyen içeriği kabul etmemeyi önerir, çünkü bu çeşitli protokoller aracılığıyla RCE'ye yol açabilir. İşletim sistemleri, RCE'yi tetikleyebilecek farklı protokolleri destekler. Bu konu hakkında daha ayrıntılı örnekler ve açıklamalar için, bu kaynağa [başvurulabilir](https://positive.security/blog/url-open-rce#windows-10-19042), bu kaynak Windows protokol örneklerini içermektedir ve bu açığı istismar edebilir. +Electron JS güvenlik en iyi uygulamaları, `openExternal` fonksiyonu ile güvenilmeyen içeriğin kabul edilmemesini önerir, çünkü bu çeşitli protokoller aracılığıyla RCE'ye yol açabilir. İşletim sistemleri, RCE'yi tetikleyebilecek farklı protokolleri destekler. Bu konu hakkında daha ayrıntılı örnekler ve açıklamalar için, bu kaynağa [başvurulabilir](https://positive.security/blog/url-open-rce#windows-10-19042), bu kaynak, bu güvenlik açığını istismar edebilecek Windows protokol örneklerini içermektedir. macOS'ta, `openExternal` fonksiyonu, `shell.openExternal('file:///System/Applications/Calculator.app')` gibi rastgele komutlar çalıştırmak için istismar edilebilir. @@ -226,11 +226,11 @@ window.open( ``` ## İç Dosyaları Okuma: XSS + contextIsolation -**`contextIsolation`'ı devre dışı bırakmak, yerel dosyaları okumak ve dışa aktarmak için `` etiketlerinin kullanılmasına olanak tanır**, `