From d2c0ec7cb4f1dacf61c8d503a3fa665561a7fa21 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 29 Sep 2025 22:24:28 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/pentesting-web/electron-des --- .../electron-desktop-apps/README.md | 260 +++++++++--------- 1 file changed, 135 insertions(+), 125 deletions(-) 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 d2db09fc1..b3c23a903 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 @@ -4,27 +4,27 @@ ## Giriş -Electron, yerel bir backend (**NodeJS**) ve bir frontend (**Chromium**) içerir; ancak modern tarayıcıların bazı güvenlik mekanizmalarından yoksundur. +Electron, yerel bir backend (**NodeJS** ile) ve bir frontend (**Chromium**) birleştirir; ancak modern tarayıcıların bazı güvenlik mekanizmalarından yoksundur. -Genellikle Electron uygulama kodunu bir `.asar` arşivinin içinde bulabilirsiniz; koda ulaşmak için bunu çıkarmanız gerekir: +Genellikle Electron uygulama kodunu bir `.asar` dosyası içinde bulabilirsiniz; kodu elde etmek için bunu çıkarmanız gerekir: ```bash npx asar extract app.asar destfolder #Extract everything npx asar extract-file app.asar main.js #Extract just a file ``` -Bir Electron uygulamasının kaynak kodunda, `packet.json` içinde güvenlik yapılandırmalarının ayarlandığı `main.js` dosyasının belirtildiğini görebilirsiniz. +Bir Electron uygulamasının kaynak kodunda, `packet.json` içinde güvenlik yapılandırmalarının ayarlandığı `main.js` dosyasını bulabilirsiniz. ```json { "name": "standard-notes", "main": "./app/index.js", ``` -Electron'un 2 işlem türü vardır: +Electron'in 2 işlem türü vardır: -- Ana İşlem (NodeJS'e tam erişimi vardır) -- Renderer İşlemi (güvenlik nedeniyle NodeJS erişimi kısıtlanmalıdır) +- Main Process (NodeJS'e tam erişimi vardır) +- Renderer Process (güvenlik nedeniyle NodeJS erişimi sınırlı olmalıdır) ![](<../../../images/image (182).png>) -Bir **renderer işlemi**, bir dosyayı yükleyen bir tarayıcı penceresi olacaktır: +Bir **renderer process**, bir dosya yükleyen bir tarayıcı penceresi olacaktır: ```javascript const { BrowserWindow } = require("electron") let win = new BrowserWindow() @@ -32,17 +32,17 @@ let win = new BrowserWindow() //Open Renderer Process win.loadURL(`file://path/to/index.html`) ``` -Settings of the **renderer process** can be **configured** in the **main process** inside the main.js file. Some of the configurations will **prevent the Electron application to get RCE** or other vulnerabilities if the **settings are correctly configured**. +**renderer process** ayarları main.js dosyası içindeki **main process** içinde **yapılandırılabilir**. Bazı yapılandırmalar, ayarlar **doğru yapılandırıldığında**, Electron uygulamasının **RCE veya diğer zafiyetlere** maruz kalmasını önleyebilir. -Electron uygulamasının Node API'leri aracılığıyla cihaza erişimi olabilir; ancak bu erişim engellenebilir: +Electron uygulaması Node apis aracılığıyla **cihaza erişebilir**, ancak bu erişim önlenebilir: -- **`nodeIntegration`** - varsayılan olarak `off`'tur. Açık ise, renderer process'ten Node özelliklerine erişime izin verir. -- **`contextIsolation`** - varsayılan olarak `on`'dur. `off` ise main ve renderer process'ler izole değildir. -- **`preload`** - varsayılan olarak boştur. -- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - varsayılan olarak kapalıdır. Bu, NodeJS'in gerçekleştirebileceği eylemleri kısıtlayacaktır. -- Workers içinde Node Integration +- **`nodeIntegration`** - varsayılan olarak `off`'tur. Açık ise, renderer process'ten node özelliklerine erişime izin verir. +- **`contextIsolation`** - varsayılan olarak `on`'dur. `off` ise main ve renderer process'leri izole değildir. +- **`preload`** - varsayılan olarak boş. +- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - varsayılan olarak `off`'tur. NodeJS'in gerçekleştirebileceği eylemleri kısıtlayacaktır. +- Node Integration in Workers - **`nodeIntegrationInSubframes`** - varsayılan olarak `off`'tur. -- Eğer **`nodeIntegration`** **etkinse**, bu Electron uygulaması içinde iframe'lerde yüklenen web sayfalarında **Node.js APIs** kullanımına izin verir. +- Eğer **`nodeIntegration`** **etkinse**, bu Electron uygulaması içinde iframe'lere yüklenen web sayfalarında **Node.js APIs** kullanımına izin verir. - Eğer **`nodeIntegration`** **devre dışıysa**, preloads iframe içinde yüklenecektir. Example of configuration: @@ -71,7 +71,7 @@ spellcheck: true, }, } ``` -Bazı **RCE payloads** from [here](https://7as.es/electron/nodeIntegration_rce.txt): +Bazı **RCE payloads** [here](https://7as.es/electron/nodeIntegration_rce.txt): ```html Example Payloads (Windows): src="x" onerror="alert(require('child_process').execSync('uname -a').toString());" /> ``` -### Trafik yakalama +### Trafiği yakalama -start-main yapılandırmasını değiştirin ve şu gibi bir proxy kullanımını ekleyin: +start-main yapılandırmasını değiştirin ve şöyle bir proxy kullanımını ekleyin: ```javascript "start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors", ``` ## Electron Local Code Injection -Eğer yerel olarak bir Electron App çalıştırabiliyorsanız, rastgele javascript kodu çalıştırmasını sağlayabilirsiniz. Nasıl olduğunu şu kaynakta kontrol edin: +Eğer yerelde bir Electron App çalıştırabiliyorsanız, onun rastgele javascript kodu çalıştırmasını sağlayabilirsiniz. Nasıl olduğunu şu kaynaktan kontrol edin: + {{#ref}} ../../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md @@ -111,7 +112,7 @@ Eğer yerel olarak bir Electron App çalıştırabiliyorsanız, rastgele javascr ## RCE: XSS + nodeIntegration -Eğer **nodeIntegration** **on** olarak ayarlanmışsa, bir web sayfasının JavaScript'i `require()` çağrısı yaparak Node.js özelliklerini kolayca kullanabilir. Örneğin, Windows'ta calc uygulamasını çalıştırma yolu şudur: +Eğer **nodeIntegration** **on** olarak ayarlanmışsa, bir web sayfasının JavaScript'i `require()` çağırarak kolayca Node.js özelliklerini kullanabilir. Örneğin, Windows'ta calc uygulamasını çalıştırma yolu şudur: ```html ``` -> [!NOTE] > **Eğer `contextIsolation` açık ise, bu çalışmaz** +> [!NOTE] > **Eğer `contextIsolation` açıksa, bu çalışmaz** ## RCE: XSS + contextIsolation -The _**contextIsolation**_ web sayfası scriptleri ile Electron'un dahili JavaScript kodu arasında ayrılmış bağlamlar oluşturur; böylece her bir kodun JavaScript yürütmesi birbirini etkilemez. Bu, RCE olasılığını ortadan kaldırmak için gerekli bir özelliktir. +_**contextIsolation**_ web sayfası scriptleri ile **JavaScript Electron'un dahili kodu arasındaki ayrılmış bağlamları** oluşturur, böylece her bir kodun JavaScript yürütmesi birbirini etkilemez. Bu, RCE ihtimalini ortadan kaldırmak için gerekli bir özelliktir. -If the contexts aren't isolated an attacker can: +Bağlamlar izole değilse bir saldırgan şunları yapabilir: -1. Renderer'da **keyfi JavaScript çalıştırmak** (XSS veya dış sitelere yönlendirme) -2. Preload veya Electron'un dahili kodunda kullanılan **yerleşik metodu üzerine yazarak** fonksiyonu ele geçirmek -3. **Tetiklemek** üzerine yazılmış **fonksiyonun** kullanılmasını +1. **renderer içinde keyfi JavaScript çalıştırmak** (XSS veya dış sitelere yönlendirme) +2. preload veya Electron'un dahili kodunda kullanılan **yerleşik metodu ezmek** ve onu kendi fonksiyonuyla değiştirmek +3. **ezilmiş fonksiyonun** kullanımını **tetiklemek** 4. RCE? There are 2 places where built-int methods can be overwritten: In preload code or in Electron internal code: @@ -178,36 +179,36 @@ electron-contextisolation-rce-via-electron-internal-code.md electron-contextisolation-rce-via-ipc.md {{#endref}} -### Tıklama olayını atlatma +### Click event'i atlatma -Bir bağlantıya tıkladığınızda kısıtlamalar uygulanıyorsa, normal sol tıklama yerine **orta tıklama yaparak** bunları atlayabilirsiniz. +Bir linke tıkladığınızda kısıtlamalar uygulanıyorsa, bunları normal sol tıklama yerine **orta tıklama yaparak** atlayabilirsiniz. ```javascript window.addEventListener('click', (e) => { ``` ## RCE via shell.openExternal -Bu örnekler hakkında daha fazla bilgi için bakınız [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) ve [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/) +Bu örnekler hakkında daha fazla bilgi için şu yazılara bakın: [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) ve [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/) -Electron masaüstü uygulamasını dağıtırken `nodeIntegration` ve `contextIsolation` için doğru ayarları sağlamak çok önemlidir. Bu ayarların etkin olduğu durumda, main process'ten preload scriptlerine veya Electron'un native koduna yönelik **client-side remote code execution (RCE)**'nin etkin bir şekilde önlendiği kabul edilir. +Bir Electron masaüstü uygulaması dağıtırken, `nodeIntegration` ve `contextIsolation` için doğru ayarların sağlanması çok önemlidir. Bu ayarların etkin olması halinde, preload betiklerini veya Electron'un native kodunu ana süreçten hedef alan **client-side remote code execution (RCE)** büyük ölçüde engellenmiş olur. -Kullanıcı linklerle etkileşime girdiğinde veya yeni pencereler açtığında, uygulamanın güvenliği ve işlevselliği için kritik olan belirli event listener'lar tetiklenir: +Kullanıcı bağlantılarla etkileşime girdiğinde veya yeni pencereler açtığında, uygulamanın güvenliği ve işlevselliği için kritik olan belirli olay dinleyicileri tetiklenir: ```javascript webContents.on("new-window", function (event, url, disposition, options) {} webContents.on("will-navigate", function (event, url) {} ``` -Bu dinleyiciler, masaüstü uygulaması tarafından kendi **iş mantığını** uygulamak için **geçersiz kılınır**. Uygulama, erişilen 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 `shell.openExternal` işlevi kullanılarak harici olarak açılması gerektiğini gösterir. +Bu dinleyiciler, kendi **iş mantığını** uygulamak için **masaüstü uygulama tarafından geçersiz kılınır**. Uygulama, gezilen bir bağlantının dahili olarak mı yoksa harici bir web tarayıcısında mı açılacağına karar verir. Bu karar genellikle `openInternally` adlı bir fonksiyon aracılığıyla verilir. Bu fonksiyon `false` dönerse, bağlantının `shell.openExternal` fonksiyonunu kullanarak harici olarak açılması gerektiğini gösterir. -**Here is a simplified pseudocode:** +**İşte basitleştirilmiş sözde kod:** ![https://miro.medium.com/max/1400/1*iqX26DMEr9RF7nMC1ANMAA.png](<../../../images/image (261).png>) ![https://miro.medium.com/max/1400/1*ZfgVwT3X1V_UfjcKaAccag.png](<../../../images/image (963).png>) -Electron JS security best practices advise against accepting untrusted content with the `openExternal` function, as it could lead to RCE through various protocols. Operating systems support different protocols that might trigger RCE. For detailed examples and further explanation on this topic, one can refer to [this resource](https://positive.security/blog/url-open-rce#windows-10-19042), which includes Windows protocol examples capable of exploiting this vulnerability. +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 konuya dair ayrıntılı örnekler ve ek açıklamalar için [this resource](https://positive.security/blog/url-open-rce#windows-10-19042) başvurulabilir; kaynak, bu açığı sömürebilecek Windows protokol örneklerini içerir. -In macos, the `openExternal` function can be exploited to execute arbitrary commands like in `shell.openExternal('file:///System/Applications/Calculator.app')`. +macos'ta, `openExternal` fonksiyonu, `shell.openExternal('file:///System/Applications/Calculator.app')` örneğinde olduğu gibi keyfi komutların çalıştırılması için kullanılabilir. -**Examples of Windows protocol exploits include:** +**Windows protokol sömürü örnekleri şunlardır:** ```html ``` -## RCE: webviewTag + vulnerable preload IPC + shell.openExternal +## RCE: webviewTag + zafiyetli preload IPC + shell.openExternal -Bu zafiyet **[this report](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)** içinde bulunabilir. +Bu zafiyet **[this report](https://flatt.tech/research/posts/escaping-electron-isolation-with-obsolete-feature/)** adresinde bulunabilir. -The **webviewTag** is a **kullanımdan kaldırılmış özellik** that allows the use of **NodeJS** in the **renderer process**, which should be disabled as it allows to load a script inside the **preload** context şöyle: +The **webviewTag** is a **kullanımdan kaldırılmış özellik** that allows the use of **NodeJS** in the **renderer process**, which should be disabled as it allows to load a script inside the preload context like: ```xml ``` -Bu nedenle, rastgele bir sayfa yüklemeyi başaran bir saldırgan bu etiketi kullanarak **rastgele bir preload script yükleyebilirdi**. +Bu nedenle, keyfi bir sayfa yüklemeyi başaran bir saldırgan bu etiketi kullanarak **keyfi bir preload script yükleyebilirdi**. -Bu preload script daha sonra **vulnerable IPC service (`skype-new-window`)**'ı çağırmak için kötüye kullanıldı; bu servis RCE elde etmek için **`shell.openExternal`**'ı çağırıyordu: +Bu preload script daha sonra **zayıf bir IPC servisi (`skype-new-window`)**'i çağırmak için suistimal edildi; bu servis RCE elde etmek için **`shell.openExternal`**'ı çağırıyordu: ```javascript (async() => { const { ipcRenderer } = require("electron"); @@ -248,13 +249,13 @@ await ipcRenderer.invoke("skype-new-window", `file:///C:/Users/${username[1]}/Do }, 5000); })(); ``` -## İç Dosyaların Okunması: XSS + contextIsolation +## İç Dosyaları Okuma: XSS + contextIsolation -**`contextIsolation`'ı devre dışı bırakmak `` etiketlerinin kullanılmasına izin verir**, `