Node inspector/CEF debug abuse
基本情報
ドキュメントから: --inspect
スイッチで起動すると、Node.jsプロセスはデバッグクライアントを待機します。デフォルトでは、ホストとポート**127.0.0.1:9229
で待機します。各プロセスには一意のUUID**も割り当てられます。
Inspectorクライアントは、接続するためにホストアドレス、ポート、およびUUIDを知って指定する必要があります。完全なURLはws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e
のようになります。
デバッガーはNode.js実行環境への完全なアクセス権を持っているため、このポートに接続できる悪意のあるアクターは、Node.jsプロセスの代わりに任意のコードを実行できる可能性があります(潜在的な特権昇格)。
Inspectorを開始する方法はいくつかあります:
以下のようなものが表示されると、検査されたプロセスが開始されます:
プロセスは、CEF (Chromium Embedded Framework) ベースのものは、デバッガを開くためにパラメータ --remote-debugging-port=9222
を使用する必要があります(SSRF保護は非常に似ています)。ただし、これらは NodeJS debug セッションを許可する代わりに、ブラウザと通信するために Chrome DevTools Protocol を使用します。これはブラウザを制御するためのインターフェースですが、直接的な RCE はありません。
デバッグされたブラウザを起動すると、次のようなものが表示されます:
ブラウザ、WebSockets、および同一オリジンポリシー
WebサイトがWebブラウザで開かれると、ブラウザセキュリティモデルの下でWebSocketおよびHTTPリクエストを行うことができます。固有のデバッガーセッションIDを取得するためには、最初にHTTP接続が必要です。同一オリジンポリシーは、WebサイトがこのHTTP接続を行うことを防ぎます。DNS再バインディング攻撃に対する追加のセキュリティ対策として、Node.jsは接続のための'Host'ヘッダーがIPアドレスまたは**localhost
またはlocalhost6
**を正確に指定していることを検証します。
このセキュリティ対策により、インスペクターを悪用してコードを実行することが防がれます(これはSSRF脆弱性を悪用して行うことができる)。
実行中プロセスでのインスペクターの開始
実行中のnodejsプロセスにシグナルSIGUSR1を送信して、デフォルトポートでインスペクターを開始させることができます。ただし、十分な権限が必要なので、これによりプロセス内の情報に特権アクセスが付与される可能性がありますが、直接的な特権昇格は行われません。
コンテナ内でこれは便利です。--inspect
でプロセスをシャットダウンして新しいプロセスを起動することは選択肢ではないため、コンテナはプロセスとともに終了されます。
インスペクター/デバッガーに接続
Chromiumベースのブラウザに接続するには、Chromeの場合はchrome://inspect
またはEdgeの場合はedge://inspect
のURLにアクセスできます。構成ボタンをクリックして、ターゲットホストとポートが正しくリストされていることを確認する必要があります。画像はリモートコード実行(RCE)の例を示しています:
コマンドラインを使用して、デバッガー/インスペクターに接続できます:
ツールhttps://github.com/taviso/cefdebugを使用すると、ローカルで実行中のインスペクタを見つけてその中にコードを注入することができます。
NodeJS RCE exploitsは、ブラウザをChrome DevTools Protocol経由で接続している場合には機能しないことに注意してください(興味深いことを見つけるためにAPIをチェックする必要があります)。
NodeJSデバッガー/インスペクターでのRCE
もしElectronのXSSからRCEを取得する方法を探してここに来た場合は、このページをご確認ください。
Node inspectorに接続できる場合にRCEを取得する一般的な方法のいくつかは、次のようなものを使用することです(Chrome DevToolsプロトコルへの接続では機能しないようです):
Chrome DevTools Protocol Payloads
APIはこちらで確認できます: https://chromedevtools.github.io/devtools-protocol/ このセクションでは、このプロトコルを悪用するために人々が使用してきた興味深い事柄をリストアップします。
ディープリンクを介したパラメーターインジェクション
CVE-2021-38112では、Rhino Securityが、CEFに基づくアプリケーションがシステムにカスタムURI(workspaces://)を登録し、そのURIを受け取り、そのURIから部分的に構築された構成でCEFベースのアプリケーションを起動していたことを発見しました。
URIパラメーターがURLデコードされ、CEFベースのアプリケーションを起動するために使用されていることが発見され、ユーザーがコマンドラインに--gpu-launcher
フラグをインジェクトして任意の操作を実行できるようになっていました。
したがって、次のようなペイロード:
ファイルの上書き
ダウンロードされたファイルが保存されるフォルダを変更し、悪意のあるコードでアプリケーションのソースコードを頻繁に使用されるように上書きするファイルをダウンロードします。
Webdriver RCE と情報の流出
この投稿によると: https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148、theriver から RCE を取得し、内部ページを流出させることが可能です。
ポストエクスプロイテーション
実際の環境において、ユーザーの PC を侵害した後、Chrome/Chromium ベースのブラウザを使用している場合、Chrome プロセスをデバッグを有効にして起動し、デバッグポートをポートフォワードしてアクセスできるようにすることができます。これにより、被害者が Chrome で行うすべての操作を検査し、機密情報を盗むことができます。
ステルスな方法は、すべての Chrome プロセスを終了させ、次のようなものを呼び出すことです:
参考文献
Last updated