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