mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/electron-des
This commit is contained in:
parent
6a53499102
commit
2f41c81a32
@ -32,7 +32,7 @@ let win = new BrowserWindow()
|
||||
//Open Renderer Process
|
||||
win.loadURL(`file://path/to/index.html`)
|
||||
```
|
||||
**renderer process**の設定は、main.jsファイル内の**main process**で**設定**できます。いくつかの設定は、**設定が正しく構成されている**場合、ElectronアプリケーションがRCEやその他の脆弱性を持つのを**防ぐ**ことができます。
|
||||
**renderer process**の設定は、main.jsファイル内の**main process**で**設定**できます。いくつかの設定は、**設定が正しく構成されていれば**、ElectronアプリケーションがRCEやその他の脆弱性を持つのを**防ぐ**ことができます。
|
||||
|
||||
Electronアプリケーションは、Node APIを介して**デバイスにアクセス**することができますが、それを防ぐように構成することもできます:
|
||||
|
||||
@ -101,7 +101,7 @@ start-main構成を変更し、次のようなプロキシの使用を追加し
|
||||
```javascript
|
||||
"start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors",
|
||||
```
|
||||
## Electron Local Code Injection
|
||||
## Electronローカルコードインジェクション
|
||||
|
||||
Electronアプリをローカルで実行できる場合、任意のJavaScriptコードを実行させることが可能です。方法は以下を確認してください:
|
||||
|
||||
@ -157,7 +157,7 @@ _**contextIsolation**_ は、**ウェブページのスクリプトとJavaScript
|
||||
コンテキストが分離されていない場合、攻撃者は以下のことができます:
|
||||
|
||||
1. **レンダラーで任意のJavaScriptを実行**(XSSまたは外部サイトへのナビゲーション)
|
||||
2. **プリロードまたはElectron内部コードで使用される組み込みメソッドを上書き**して独自の関数にする
|
||||
2. プリロードまたはElectron内部コードで使用される**組み込みメソッドを上書き**して独自の関数にする
|
||||
3. **上書きされた関数の使用をトリガー**
|
||||
4. RCE?
|
||||
|
||||
@ -177,15 +177,15 @@ electron-contextisolation-rce-via-ipc.md
|
||||
|
||||
### クリックイベントのバイパス
|
||||
|
||||
リンクをクリックする際に制限が適用されている場合、通常の左クリックの代わりに**ミドルクリック**を行うことでそれをバイパスできるかもしれません。
|
||||
リンクをクリックしたときに制限が適用されている場合、通常の左クリックの代わりに**ミドルクリックを行うことでそれをバイパスできるかもしれません**。
|
||||
```javascript
|
||||
window.addEventListener('click', (e) => {
|
||||
```
|
||||
## RCE via shell.openExternal
|
||||
|
||||
この例に関する詳細は、[https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) と [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/) を確認してください。
|
||||
この例に関する詳細は[https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8)および[https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/)を確認してください。
|
||||
|
||||
Electronデスクトップアプリケーションを展開する際には、`nodeIntegration` と `contextIsolation` の設定が正しいことを確認することが重要です。**クライアント側のリモートコード実行 (RCE)** がプリロードスクリプトやメインプロセスからのElectronのネイティブコードをターゲットにする場合、これらの設定が整っていれば効果的に防止されることが確立されています。
|
||||
Electronデスクトップアプリケーションを展開する際には、`nodeIntegration`と`contextIsolation`の設定が正しいことを確認することが重要です。**クライアント側のリモートコード実行(RCE)**がプリロードスクリプトやメインプロセスからのElectronのネイティブコードをターゲットにする場合、これらの設定が整っていれば効果的に防止されることが確立されています。
|
||||
|
||||
ユーザーがリンクと対話したり新しいウィンドウを開いたりすると、特定のイベントリスナーがトリガーされ、アプリケーションのセキュリティと機能にとって重要です:
|
||||
```javascript
|
||||
@ -262,7 +262,7 @@ webContents.on("will-navigate", function (event, url) {} // o
|
||||
```
|
||||
**`openInternally`**への呼び出しは、**リンク**がプラットフォームに属するリンクであるため、**デスクトップウィンドウ**で**開かれる**か、**ブラウザで3rdパーティリソース**として**開かれる**かを決定します。
|
||||
|
||||
関数で使用される**regex**が**バイパスに対して脆弱**な場合(例えば、**サブドメインのドットをエスケープしていない**場合)、攻撃者はXSSを悪用して、攻撃者のインフラストラクチャに位置する**新しいウィンドウを開き**、ユーザーに**認証情報を要求**することができます。
|
||||
関数で使用される**regex**が**バイパスに対して脆弱**な場合(例えば、**サブドメインのドットをエスケープしていない**場合)、攻撃者はXSSを悪用して、攻撃者のインフラストラクチャに位置する**新しいウィンドウを開き**、ユーザーに**資格情報を要求する**ことができます。
|
||||
```html
|
||||
<script>
|
||||
window.open("<http://subdomainagoogleq.com/index.html>")
|
||||
@ -278,9 +278,9 @@ Electronのリモートモジュールは、**レンダラープロセスがメ
|
||||
> [!WARNING]
|
||||
> まだリモートモジュールを使用している多くのアプリは、レンダラープロセスで**NodeIntegrationを有効にする必要がある**方法で行っており、これは**巨大なセキュリティリスク**です。
|
||||
|
||||
Electron 14以降、Electronの`remote`モジュールは、セキュリティとパフォーマンスの理由からいくつかのステップで有効にされる可能性があり、**使用しないことが推奨されています**。
|
||||
Electron 14以降、Electronの`remote`モジュールは、セキュリティとパフォーマンスの理由から**使用しないことが推奨されています**。
|
||||
|
||||
それを有効にするには、まず**メインプロセスで有効にする必要があります**:
|
||||
これを有効にするには、まず**メインプロセスで有効にする必要があります**:
|
||||
```javascript
|
||||
const remoteMain = require('@electron/remote/main')
|
||||
remoteMain.initialize()
|
||||
@ -295,7 +295,7 @@ remoteMain.enable(mainWindow.webContents)
|
||||
```javascript
|
||||
import { dialog, getCurrentWindow } from '@electron/remote'
|
||||
```
|
||||
**[ブログ記事](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** は、リモートモジュールのオブジェクト **`app`** によって公開されているいくつかの興味深い **関数** を示しています:
|
||||
**[ブログ記事](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)** は、リモートモジュールのオブジェクト **`app`** によって公開されるいくつかの興味深い **関数** を示しています:
|
||||
|
||||
- **`app.relaunch([options])`**
|
||||
- **現在のインスタンスを終了**し、新しいインスタンスを**起動**することでアプリケーションを**再起動**します。**アプリの更新**や重要な**状態変更**に便利です。
|
||||
@ -310,7 +310,7 @@ import { dialog, getCurrentWindow } from '@electron/remote'
|
||||
- **`app.moveToApplicationsFolder([options])`**
|
||||
- アプリケーションを**アプリケーションフォルダ**に**移動**します(macOS)。Macユーザーのための**標準インストール**を確保するのに役立ちます。
|
||||
- **`app.setJumpList(categories)`**
|
||||
- **Windows**で**カスタムジャンプリスト**を**設定**または**削除**します。タスクがユーザーにどのように表示されるかを整理するために**カテゴリ**を指定できます。
|
||||
- **カスタムジャンプリスト**を**設定**または**削除**します(Windows)。タスクがユーザーにどのように表示されるかを整理するために**カテゴリ**を指定できます。
|
||||
- **`app.setLoginItemSettings(settings)`**
|
||||
- **ログイン**時に起動する**実行可能ファイル**とその**オプション**を**構成**します(macOSおよびWindowsのみ)。
|
||||
```javascript
|
||||
@ -337,8 +337,8 @@ console.log('Recent Places:', recentPlaces);
|
||||
### **subscribeNotification / subscribeWorkspaceNotification**
|
||||
|
||||
* **ネイティブmacOS通知**をNSDistributedNotificationCenterを使用して**リッスン**します。
|
||||
* **macOS Catalina**以前は、CFNotificationCenterAddObserverに**nil**を渡すことで**すべての**分散通知をスニッフィングできました。
|
||||
* **Catalina / Big Sur**以降、サンドボックスアプリは、通知を**名前**で登録することにより、**多くのイベント**(例えば、**画面のロック/ロック解除**、**ボリュームのマウント**、**ネットワークアクティビティ**など)に**サブスクライブ**できます。
|
||||
* **macOS Catalina**以前は、CFNotificationCenterAddObserverに**nil**を渡すことで**すべての**配布通知をスニッフィングできました。
|
||||
* **Catalina / Big Sur**以降、サンドボックスアプリは**名前**で通知を登録することで、**多くのイベント**(例えば、**画面のロック/ロック解除**、**ボリュームのマウント**、**ネットワークアクティビティ**など)に**サブスクライブ**できます。
|
||||
|
||||
### **getUserDefault / setUserDefault**
|
||||
|
||||
@ -356,18 +356,30 @@ console.log('Recent Places:', recentPlaces);
|
||||
|
||||
詳細については、[https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)を確認してください。
|
||||
|
||||
## Content Security Policy
|
||||
|
||||
Electronアプリは、**XSS攻撃**を**防ぐ**ために**Content Security Policy (CSP)**を持つべきです。**CSP**は、ブラウザ内での**信頼できないコード**の**実行**を**防ぐ**のに役立つ**セキュリティ標準**です。
|
||||
|
||||
通常、**`main.js`**ファイルまたは**`index.html`**テンプレート内の**metaタグ**内にCSPを**設定**します。
|
||||
|
||||
詳細については、以下を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
pentesting-web/content-security-policy-csp-bypass/
|
||||
{{#endref}}
|
||||
|
||||
## **Tools**
|
||||
|
||||
- [**Electronegativity**](https://github.com/doyensec/electronegativity)は、Electronベースのアプリケーションにおける設定ミスやセキュリティアンチパターンを特定するツールです。
|
||||
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint)は、Electronegativityを使用するElectronアプリケーション用のオープンソースのVS Codeプラグインです。
|
||||
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan)は、脆弱なサードパーティライブラリをチェックします。
|
||||
- [**Electronegativity**](https://github.com/doyensec/electronegativity)は、Electronベースのアプリケーションにおける設定ミスやセキュリティアンチパターンを特定するためのツールです。
|
||||
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint)は、Electronegativityを使用するElectronアプリケーションのためのオープンソースのVS Codeプラグインです。
|
||||
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan)は、脆弱なサードパーティライブラリをチェックするためのツールです。
|
||||
- [**Electro.ng**](https://electro.ng/): 購入が必要です。
|
||||
|
||||
## Labs
|
||||
|
||||
[https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s)では、脆弱なElectronアプリを悪用するためのラボを見つけることができます。
|
||||
[https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s)で脆弱なElectronアプリを悪用するためのラボを見つけることができます。
|
||||
|
||||
ラボを手助けするいくつかのコマンド:
|
||||
ラボを手助けするいくつかのコマンド:
|
||||
```bash
|
||||
# Download apps from these URls
|
||||
# Vuln to nodeIntegration
|
||||
@ -397,7 +409,7 @@ npm start
|
||||
- [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=8)
|
||||
- [https://www.youtube.com/watch?v=a-YnG3Mx-Tg](https://www.youtube.com/watch?v=a-YnG3Mx-Tg)
|
||||
- [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s)
|
||||
- Electronのセキュリティに関するさらなる研究と記事は[https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking)で確認できます。
|
||||
- Electronセキュリティに関するさらなる研究と記事は[https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking)で確認できます。
|
||||
- [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq&index=81)
|
||||
- [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user