Translated ['src/network-services-pentesting/pentesting-web/electron-des

This commit is contained in:
Translator 2025-01-07 18:44:08 +00:00
parent 098f19d2d6
commit 14cb9ae982

View File

@ -42,8 +42,8 @@ Electron uygulaması, Node API'leri aracılığıyla **cihazı erişebilir**, an
- [**`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ç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.
- 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.
Yapılandırma örneği:
```javascript
@ -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şimi vardır**:
Bu ayardaki script, **renderer'daki diğer scriptlerden önce yüklenir**, bu nedenle **Node API'lerine sınırsız erişime sahiptir**:
```javascript
new BrowserWindow{
webPreferences: {
@ -152,7 +152,7 @@ runCalc()
## RCE: XSS + contextIsolation
_**contextIsolation**_, **web sayfası scriptleri ile JavaScript Electron'un iç kodu arasında ayrılmış bağlamlar** tanıtarak her bir kodun JavaScript yürütmesinin diğerini etkilememesini sağlar. Bu, RCE olasılığını ortadan kaldırmak için gerekli bir özelliktir.
_**contextIsolation**_, **web sayfası scriptleri ile JavaScript Electron'un iç kodu arasında ayrılmış bağlamlar** tanıtarak her bir kodun JavaScript yürütmesinin birbirini etkilememesini sağlar. Bu, RCE olasılığını ortadan kaldırmak için gerekli bir özelliktir.
Eğer bağlamlar izole edilmemişse, bir saldırgan:
@ -177,13 +177,13 @@ 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 sol tıklama yerine orta tıklama yaparak** atlatabilirsiniz.
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.
```javascript
window.addEventListener('click', (e) => {
```
## RCE via shell.openExternal
Bu örnekler hakkında daha fazla bilgi için [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/) adreslerine bakın.
Bu örnekler hakkında daha fazla bilgi için [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/) adreslerini kontrol edin.
Bir Electron masaüstü uygulaması dağıtırken, `nodeIntegration` ve `contextIsolation` için doğru ayarların sağlanması çok önemlidir. **İstemci tarafı uzaktan kod yürütme (RCE)**, ön yükleme betikleri veya ana süreçten Electron'un yerel kodunu hedef alarak bu ayarlar ile etkili bir şekilde engellenir.
@ -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, gidilen bir bağlantının dahili olarak mı yoksa harici bir web tarayıcısında mıı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.
Bu dinleyiciler **masaüstü uygulaması tarafından geçersiz kılınır** ve kendi **iş mantığını** uygular. Uygulama, yönlendirilmiş bir bağlantının dahili olarak mı yoksa harici bir web tarayıcısında mıılması gerektiğini değerlendirir. Bu karar genellikle `openInternally` adlı bir fonksiyon 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:**
@ -202,9 +202,9 @@ Bu dinleyiciler **masaüstü uygulaması tarafından geçersiz kılınır** ve k
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.
macos'ta, `openExternal` fonksiyonu, `shell.openExternal('file:///System/Applications/Calculator.app')` gibi rastgele komutlar çalıştırmak için istismar edilebilir.
**Windows protokol istismarlarına örnekler şunlardır:**
**Windows protokol istismarına örnekler şunlardır:**
```html
<script>
window.open(
@ -226,11 +226,11 @@ window.open(
```
## İç Dosyaları Okuma: XSS + contextIsolation
**`contextIsolation`'ı devre dışı bırakmak, yerel dosyaları okumak ve dışarı aktarmak için `<webview>` etiketlerinin** kullanılmasına olanak tanır; bu, `<iframe>`'e benzer. Sağlanan bir örnek, bu güvenlik açığını kullanarak iç dosyaların içeriğini okuma yöntemini göstermektedir:
**`contextIsolation`'ı devre dışı bırakmak, yerel dosyaları okumak ve dışa aktarmak için `<webview>` etiketlerinin kullanılmasına olanak tanır**, `<iframe>`'e benzer. Verilen bir örnek, bu güvenlik açığını kullanarak iç dosyaların içeriğini okuma yöntemini göstermektedir:
![](<../../../images/1 u1jdRYuWAEVwJmf_F2ttJg (1).png>)
Ayrıca, **bir iç dosyayı okuma** için başka bir yöntem paylaşılmakta ve bir Electron masaüstü uygulamasındaki kritik bir yerel dosya okuma güvenlik açığı vurgulanmaktadır. Bu, uygulamayı istismar etmek ve verileri dışarı aktarmak için bir script enjekte etmeyi içerir:
Ayrıca, **bir iç dosyayı okuma** için başka bir yöntem paylaşılmakta, bir Electron masaüstü uygulamasında kritik bir yerel dosya okuma güvenlik açığını vurgulamaktadır. Bu, uygulamayı istismar etmek ve verileri dışa aktarmak için bir script enjekte etmeyi içermektedir:
```html
<br /><br /><br /><br />
<h1>
@ -249,20 +249,20 @@ frames[0].document.body.innerText
## **RCE: XSS + Eski Chromium**
Eğer uygulamanın kullandığı **chromium** **eski** ise ve üzerinde **bilinen** **zafiyetler** varsa, **bunu istismar etmek ve XSS aracılığıyla RCE elde etmek** mümkün olabilir.\
Bununla ilgili bir örneği bu **yazıda** görebilirsiniz: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
Bir örneği bu **yazıda** görebilirsiniz: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
## **XSS Phishing İçin Dahili URL regex atlatma**
Bir XSS bulduğunuzu varsayalım ama **RCE'yi tetikleyemiyorsanız veya dahili dosyaları ç alamıyorsanız**, bunu **kimlik bilgilerini phishing ile çalmak için** kullanmayı deneyebilirsiniz.
Öncelikle, yeni bir URL açmaya çalıştığınızda neler olduğunu, ön uçtaki JS kodunu kontrol ederek bilmeniz gerekiyor:
Öncelikle, yeni bir URL açmaya çalıştığınızda neler olduğunu, ön uçtaki JS kodunu kontrol ederek bilmeniz gerekir:
```javascript
webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below)
webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below)
```
**`openInternally`** çağrısı, **bağlantının** platforma ait bir bağlantı olup olmadığına göre **masaüstü penceresinde** **açılıp açılmayacağına** veya **tarayıcıda 3. parti bir kaynak** olarak mıılacağına karar verecektir.
**`openInternally`** çağrısı, **bağlantının** platforma ait bir bağlantı olup olmadığına göre **masaüstü penceresinde** **açılıp açılmayacağına** veya **tarayıcıda 3. parti bir kaynak** olarak **açılıp açılmayacağına** karar verecektir.
Eğer fonksiyonun kullandığı **regex** **bypass'lere** karşı **zayıfsa** (örneğin **alt alan adlarının noktalarını kaçırmıyorsa**) bir saldırgan, XSS'i kötüye kullanarak **saldırganın altyapısında** bulunan ve kullanıcıdan **kimlik bilgileri** isteyen yeni bir pencere **açabilir**:
Eğer fonksiyonun kullandığı **regex** **bypass'lere karşı savunmasızsa** (örneğin **alt alan adlarının noktalarını kaçırmıyorsa**) bir saldırgan, XSS'i kötüye kullanarak **saldırganın altyapısında bulunan** yeni bir pencere **açabilir** ve kullanıcıdan **kimlik bilgileri** isteyebilir:
```html
<script>
window.open("<http://subdomainagoogleq.com/index.html>")
@ -270,7 +270,7 @@ window.open("<http://subdomainagoogleq.com/index.html>")
```
## Remote modülü
Electron Remote modülü, **renderer süreçlerinin ana süreç API'lerine erişmesine** olanak tanır ve bir Electron uygulaması içinde iletişimi kolaylaştırır. Ancak, bu modülün etkinleştirilmesi önemli güvenlik riskleri getirir. Uygulamanın saldırı yüzeyini genişleterek, onu cross-site scripting (XSS) saldırıları gibi zafiyetlere daha duyarlı hale getirir.
Electron Remote modülü, **renderer süreçlerinin ana süreç API'lerine erişmesine** olanak tanır ve bir Electron uygulaması içinde iletişimi kolaylaştırır. Ancak, bu modülün etkinleştirilmesi önemli güvenlik riskleri getirir. Uygulamanın saldırı yüzeyini genişleterek, onu cross-site scripting (XSS) saldırıları gibi zayıflıklara daha duyarlı hale getirir.
> [!TIP]
> **remote** modülü ana süreçten renderer süreçlerine bazı API'leri açsa da, yalnızca bileşenleri kötüye kullanarak RCE elde etmek kolay değildir. Ancak, bileşenler hassas bilgileri açığa çıkarabilir.
@ -278,7 +278,7 @@ Electron Remote modülü, **renderer süreçlerinin ana süreç API'lerine eriş
> [!WARNING]
> Hala remote modülünü kullanan birçok uygulama, renderer sürecinde **NodeIntegration'ın etkinleştirilmesini gerektirir**, bu da **büyük bir güvenlik riski** oluşturur.
Electron 14'ten itibaren `remote` modülü, güvenlik ve performans nedenleriyle birkaç adımda etkinleştirilebilir; bu nedenle **kullanılmaması önerilir**.
Electron 14'ten itibaren, Electron'un `remote` modülü güvenlik ve performans nedenleriyle birkaç adımda etkinleştirilebilir, bu nedenle **kullanılmaması önerilir**.
Etkinleştirmek için, önce **ana süreçte etkinleştirilmesi gerekir**:
```javascript
@ -300,7 +300,7 @@ import { dialog, getCurrentWindow } from '@electron/remote'
- **`app.relaunch([options])`**
- Mevcut örneği **kapatarak** uygulamayı **yeniden başlatır** ve yeni bir tane **başlatır**. **Uygulama güncellemeleri** veya önemli **durum değişiklikleri** için faydalıdır.
- **`app.setAppLogsPath([path])`**
- **Uygulama günlükleri** depolamak için bir dizin **tanımlar** veya **oluşturur**. Günlükler **`app.getPath()`** veya **`app.setPath(pathName, newPath)`** kullanılarak **alınabilir** veya **değiştirilebilir**.
- **Uygulama günlüklerini** depolamak için bir dizin **tanımlar** veya **oluşturur**. Günlükler **`app.getPath()`** veya **`app.setPath(pathName, newPath)`** kullanılarak **alınabilir** veya **değiştirilebilir**.
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
- Belirtilen **protokol** için mevcut çalıştırılabilir dosyayı **varsayılan işleyici** olarak **kaydeder**. Gerekirse **özel bir yol** ve **argümanlar** sağlayabilirsiniz.
- **`app.setUserTasks(tasks)`**
@ -319,7 +319,7 @@ Native.app.exit()
```
## systemPreferences modülü
Electron'da sistem tercihlerine erişmek ve **sistem olaylarını yaymak** için **birincil API**. **subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault** ve **setUserDefault** gibi yöntemler bu modülün **bir parçasıdır**.
Electron'da sistem tercihlerine erişmek ve sistem olaylarını yaymak için **birincil API**. **subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault** ve **setUserDefault** gibi yöntemler bu modülün **bir parçasıdır**.
**Örnek kullanım:**
```javascript
@ -337,8 +337,8 @@ console.log('Recent Places:', recentPlaces);
### **subscribeNotification / subscribeWorkspaceNotification**
* **Yerel macOS bildirimlerini** dinler, NSDistributedNotificationCenter kullanarak.
* **macOS Catalina'dan** önce, CFNotificationCenterAddObserver'a **nil** geçirerek **tüm** dağıtılmış bildirimleri dinleyebilirdiniz.
* **Catalina / Big Sur'dan** sonra, sandboxed uygulamalar hala **birçok olaya** (örneğin, **ekran kilitlenmeleri/açılmaları**, **ses montajları**, **ağ etkinliği** vb.) **isimle** bildirim kaydederek **abone** olabilir.
* **macOS Catalina**'dan önce, CFNotificationCenterAddObserver'a **nil** geçirerek **tüm** dağıtılmış bildirimleri dinleyebilirdiniz.
* **Catalina / Big Sur**'dan sonra, sandboxed uygulamalar hala **birçok olaya** (örneğin, **ekran kilitlenmeleri/açılmaları**, **ses montajları**, **ağ etkinliği** vb.) **isimle** bildirim kaydederek **abone** olabilir.
### **getUserDefault / setUserDefault**
@ -354,18 +354,30 @@ console.log('Recent Places:', recentPlaces);
Bu fonksiyon, verilen dosyayı bir dosya yöneticisinde gösterir, bu da **dosyanın otomatik olarak çalıştırılmasına** neden olabilir.
Daha fazla bilgi için [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
Daha fazla bilgi için [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html) adresine bakın.
## Content Security Policy
Electron uygulamaları, **XSS saldırılarını** **önlemek** için bir **İçerik Güvenlik Politikası (CSP)**'ye sahip olmalıdır. **CSP**, tarayıcıda **güvensiz kodun** **çalıştırılmasını** **önlemeye** yardımcı olan bir **güvenlik standardıdır**.
Genellikle **`main.js`** dosyasında veya **`index.html`** şablonunda CSP'nin bulunduğu bir **meta etiketi** ile **yapılandırılır**.
Daha fazla bilgi için kontrol edin:
{{#ref}}
pentesting-web/content-security-policy-csp-bypass/
{{#endref}}
## **Tools**
- [**Electronegativity**](https://github.com/doyensec/electronegativity), Electron tabanlı uygulamalardaki yanlış yapılandırmaları ve güvenlik anti-patentlerini tanımlamak için bir araçtır.
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint), Electronegativity kullanan Electron uygulamaları için açık kaynaklı bir VS Code eklentisidir.
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan), savunmasız üçüncü taraf kütüphaneleri kontrol etmek için.
- [**Electro.ng**](https://electro.ng/): Satın almanız gerekiyor.
- [**Electronegativity**](https://github.com/doyensec/electronegativity) Electron tabanlı uygulamalardaki yanlış yapılandırmaları ve güvenlik anti-patentlerini tanımlamak için bir araçtır.
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) Electronegativity kullanan Electron uygulamaları için açık kaynaklı bir VS Code eklentisidir.
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) güvenlik açığı olan üçüncü taraf kütüphaneleri kontrol etmek için
- [**Electro.ng**](https://electro.ng/): Satın almanız gerekiyor
## Labs
[https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) adresinde savunmasız Electron uygulamalarını istismar etmek için bir laboratuvar bulabilirsiniz.
[https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) adresinde güvenlik açığı olan Electron uygulamalarını istismar etmek için bir laboratuvar bulabilirsiniz.
Laboratuvarda size yardımcı olacak bazı komutlar:
```bash