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
0614432d21
commit
6a53499102
@ -101,9 +101,9 @@ start-main構成を変更し、次のようなプロキシの使用を追加し
|
||||
```javascript
|
||||
"start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors",
|
||||
```
|
||||
## Electronローカルコードインジェクション
|
||||
## Electron Local Code Injection
|
||||
|
||||
Electronアプリをローカルで実行できる場合、任意のJavaScriptコードを実行させることが可能です。方法については以下を確認してください:
|
||||
Electronアプリをローカルで実行できる場合、任意のJavaScriptコードを実行させることが可能です。方法は以下を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
../../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md
|
||||
@ -152,7 +152,7 @@ runCalc()
|
||||
|
||||
## RCE: XSS + contextIsolation
|
||||
|
||||
_**contextIsolation**_ は、**ウェブページのスクリプトとJavaScript Electronの内部コードの間に分離されたコンテキストを導入**し、それぞれのコードのJavaScript実行が互いに影響を与えないようにします。これはRCEの可能性を排除するために必要な機能です。
|
||||
_**contextIsolation**_ は、**ウェブページのスクリプトとJavaScript Electronの内部コードの間に分離されたコンテキストを導入**し、各コードのJavaScript実行が互いに影響を与えないようにします。これはRCEの可能性を排除するために必要な機能です。
|
||||
|
||||
コンテキストが分離されていない場合、攻撃者は以下のことができます:
|
||||
|
||||
@ -177,22 +177,22 @@ 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
|
||||
webContents.on("new-window", function (event, url, disposition, options) {}
|
||||
webContents.on("will-navigate", function (event, url) {}
|
||||
```
|
||||
これらのリスナーは**デスクトップアプリケーションによってオーバーライドされ**、独自の**ビジネスロジック**を実装します。アプリケーションは、ナビゲートされたリンクが内部で開かれるべきか、外部のウェブブラウザで開かれるべきかを評価します。この決定は通常、`openInternally`という関数を通じて行われます。この関数が`false`を返す場合、リンクは外部で開かれるべきであることを示し、`shell.openExternal`関数を利用します。
|
||||
これらのリスナーは**デスクトップアプリケーションによってオーバーライドされ**、独自の**ビジネスロジック**を実装します。アプリケーションは、ナビゲートされたリンクを内部で開くべきか、外部のウェブブラウザで開くべきかを評価します。この決定は通常、`openInternally`という関数を通じて行われます。この関数が`false`を返す場合、リンクは外部で開くべきであることを示し、`shell.openExternal`関数を利用します。
|
||||
|
||||
**以下は簡略化された擬似コードです:**
|
||||
|
||||
@ -226,11 +226,11 @@ window.open(
|
||||
```
|
||||
## 内部ファイルの読み取り: XSS + contextIsolation
|
||||
|
||||
**`contextIsolation`を無効にすると、ローカルファイルを読み取るために`<webview>`タグを使用できるようになります**。これは`<iframe>`に似ています。この脆弱性を利用して内部ファイルの内容を読み取る方法の例が示されています:
|
||||
**`contextIsolation`を無効にすると、ローカルファイルを読み取るために`<webview>`タグを使用できるようになります**。これは`<iframe>`に似ています。この脆弱性を利用して内部ファイルの内容を読み取る方法の例が示されています:
|
||||
|
||||
.png>)
|
||||
|
||||
さらに、**内部ファイルを読み取る**ための別の方法が共有されており、Electronデスクトップアプリにおける重大なローカルファイル読み取りの脆弱性が強調されています。これには、アプリケーションを悪用してデータを抽出するためのスクリプトを注入することが含まれます:
|
||||
さらに、**内部ファイルを読み取る**ための別の方法が共有されており、Electronデスクトップアプリにおける重要なローカルファイル読み取りの脆弱性が強調されています。これには、アプリケーションを悪用してデータを抽出するためのスクリプトを注入することが含まれます:
|
||||
```html
|
||||
<br /><br /><br /><br />
|
||||
<h1>
|
||||
@ -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>")
|
||||
@ -280,7 +280,7 @@ Electronのリモートモジュールは、**レンダラープロセスがメ
|
||||
|
||||
Electron 14以降、Electronの`remote`モジュールは、セキュリティとパフォーマンスの理由からいくつかのステップで有効にされる可能性があり、**使用しないことが推奨されています**。
|
||||
|
||||
これを有効にするには、まず**メインプロセスで有効にする必要があります**:
|
||||
それを有効にするには、まず**メインプロセスで有効にする必要があります**:
|
||||
```javascript
|
||||
const remoteMain = require('@electron/remote/main')
|
||||
remoteMain.initialize()
|
||||
@ -291,7 +291,7 @@ mainWindow = new BrowserWindow({
|
||||
})
|
||||
remoteMain.enable(mainWindow.webContents)
|
||||
```
|
||||
その後、レンダラープロセスは、モジュールからオブジェクトを次のようにインポートできます:
|
||||
その後、レンダラープロセスはモジュールからオブジェクトをインポートできます。
|
||||
```javascript
|
||||
import { dialog, getCurrentWindow } from '@electron/remote'
|
||||
```
|
||||
@ -337,12 +337,12 @@ console.log('Recent Places:', recentPlaces);
|
||||
### **subscribeNotification / subscribeWorkspaceNotification**
|
||||
|
||||
* **ネイティブmacOS通知**をNSDistributedNotificationCenterを使用して**リッスン**します。
|
||||
* **macOS Catalina**以前は、CFNotificationCenterAddObserverに**nil**を渡すことで**すべての**配布通知をスニッフィングできました。
|
||||
* **macOS Catalina**以前は、CFNotificationCenterAddObserverに**nil**を渡すことで**すべての**分散通知をスニッフィングできました。
|
||||
* **Catalina / Big Sur**以降、サンドボックスアプリは、通知を**名前**で登録することにより、**多くのイベント**(例えば、**画面のロック/ロック解除**、**ボリュームのマウント**、**ネットワークアクティビティ**など)に**サブスクライブ**できます。
|
||||
|
||||
### **getUserDefault / setUserDefault**
|
||||
|
||||
* **NSUserDefaults**と**インターフェース**を持ち、macOS上の**アプリケーション**または**グローバル**な設定を保存します。
|
||||
* **NSUserDefaults**と**インターフェース**し、macOS上の**アプリケーション**または**グローバル**な設定を保存します。
|
||||
|
||||
* **getUserDefault**は、**最近のファイルの場所**や**ユーザーの地理的位置**などの機密情報を**取得**できます。
|
||||
|
||||
@ -354,18 +354,18 @@ 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)を確認してください。
|
||||
詳細については、[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ベースのアプリケーションにおける設定ミスやセキュリティのアンチパターンを特定するためのツールです。
|
||||
- [**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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user