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

This commit is contained in:
Translator 2025-01-07 18:27:56 +00:00
parent bc7f9b334b
commit 098f19d2d6

View File

@ -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ıı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ıı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 `<webview>` etiketlerinin kullanılmasına olanak tanır**, `<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ış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:
![](<../../../images/1 u1jdRYuWAEVwJmf_F2ttJg (1).png>)
Ayrıca, **bir iç dosyayı okuma** için başka bir yöntem paylaşılmakta, bir Electron masaüstü uygulamasındaki 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:
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:
```html
<br /><br /><br /><br />
<h1>
@ -255,14 +255,14 @@ Bununla ilgili bir örneği bu **yazıda** görebilirsiniz: [https://blog.electr
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 gerekir:
Öncelikle, yeni bir URL açmaya çalıştığınızda neler olduğunu, ön uçtaki JS kodunu kontrol ederek bilmeniz gerekiyor:
```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 **üçüncü taraf bir kaynak** olarak **tarayıcıda**ılıp açılmayacağı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 mıılacağına karar verecektir.
Eğer fonksiyon tarafından kullanılan **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 **kullanıcıdan kimlik bilgileri** talep eden **yeni bir pencere açabilir**:
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**:
```html
<script>
window.open("<http://subdomainagoogleq.com/index.html>")
@ -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, Electron'un `remote` modülü güvenlik ve performans nedenleriyle birkaç adımda etkinleştirilebilir, bu nedenle **kullanılmaması önerilir**.
Electron 14'ten itibaren `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
@ -302,7 +302,7 @@ import { dialog, getCurrentWindow } from '@electron/remote'
- **`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**.
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
- Mevcut çalıştırılabilir dosyayı belirtilen **protokol** için **varsayılan işleyici** olarak **kaydeder**. Gerekirse **özel bir yol** ve **argümanlar** sağlayabilirsiniz.
- 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)`**
- **Jump List** (Windows'ta) içindeki **Görevler kategorisine** görevler **ekler**. Her görev, uygulamanın nasıl **başlatılacağını** veya hangi **argümanların** geçeceğini kontrol edebilir.
- **`app.importCertificate(options, callback)`**
@ -310,7 +310,7 @@ import { dialog, getCurrentWindow } from '@electron/remote'
- **`app.moveToApplicationsFolder([options])`**
- Uygulamayı **Uygulamalar klasörüne** **taşır** (macOS'ta). Mac kullanıcıları için **standart bir kurulum** sağlamaya yardımcı olur.
- **`app.setJumpList(categories)`**
- **Windows** üzerinde **özel bir Jump List** **ayarlar** veya **kaldırır**. Görevlerin kullanıcıya nasıl görüneceğini düzenlemek için **kategoriler** belirtebilirsiniz.
- **Windows** üzerinde bir **özel Jump List** **ayarlar** veya **kaldırır**. Görevlerin kullanıcıya nasıl görüneceğini düzenlemek için **kategoriler** belirtebilirsiniz.
- **`app.setLoginItemSettings(settings)`**
- **Girişte** hangi **çalıştırılabilir dosyaların** **başlatılacağını** ve bunların **seçeneklerini** **ayarlar** (sadece macOS ve Windows).
```javascript
@ -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
@ -354,11 +354,11 @@ 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) adresine bakın.
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)
## **Tools**
- [**Electronegativity**](https://github.com/doyensec/electronegativity), Electron tabanlı uygulamalardaki yanlış yapılandırmaları ve güvenlik anti-paternlerini tanımlamak için bir araçtır.
- [**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.