メインコンテンツにスキップ

「runAsNode」に関するCVEについての声明

·4分で読めます

本日、Electronチームは、いくつかの著名なElectronアプリに対して最近提出された複数の公開CVEに注意を促されました。CVEは、Electronの2つのヒューズ - runAsNodeenableNodeCliInspectArguments - に関連しており、これらのコンポーネントが積極的に無効化されていない場合、リモート攻撃者がこれらのコンポーネントを介して任意のコードを実行できると誤って主張しています。

これらのCVEは誠意を持って提出されたものではないと考えています。まず、この声明は誤りであり、この構成ではリモートコード実行は有効になりません。次に、これらのCVEで名前が挙がっている企業は、バグ報奨金プログラムを持っているにもかかわらず通知を受けていません。最後に、問題のコンポーネントを無効にすることがアプリのセキュリティを強化すると信じていますが、CVEが正しい重大度で提出されたとは考えていません。「重大」は最も危険な問題のために予約されており、ここではそうではありません。

誰でもCVEをリクエストできます。これはソフトウェア業界全体の健全性には良いことですが、単一のセキュリティ研究者の評判を高めるために「CVEをファームする」ことは役に立ちません。

とは言え、恐ろしい重大度を持つCVEが存在することだけで、エンドユーザーの混乱を招く可能性があることを理解しています。そのため、プロジェクトとして、この問題に対処するためのガイダンスと支援を提供したいと思います。

この問題は私にどのような影響を与える可能性がありますか?

CVEを確認した後、Electronチームは、これらのCVEは重大ではないと考えています。

攻撃者は、ハードウェアへの物理的なアクセス権を持っているか、完全なリモートコード実行を達成しているかのいずれかで、すでにマシン上で任意のコマンドを実行できる必要があります。これは繰り返す必要があります。説明されている脆弱性は、攻撃者が攻撃されたシステムにすでにアクセスできることを必要とします。

たとえば、Chromeは、物理的なローカル攻撃を脅威モデルとは考えていません

Chrome(または任意のアプリケーション)が、あなたとしてデバイスにログインした悪意のあるユーザーや、オペレーティングシステムのユーザーアカウントの権限でソフトウェアを実行できるユーザーから防御する方法がないため、これらの攻撃をChromeの脅威モデルの外であると考えています。そのような攻撃者は、実行可能ファイルやDLLを修正したり、PATHなどの環境変数を変更したり、構成ファイルを変更したり、ユーザーアカウントが所有するデータを読み取ったり、自分自身にメールで送信したりできます。そのような攻撃者はデバイスを完全に制御しており、Chromeができることでは、真剣な防御保証を提供できません。この問題はChromeに特有のものではなく、すべてのアプリケーションは物理的なローカルユーザーを信頼する必要があります。

CVEで説明されているエクスプロイトを使用すると、攻撃者は、影響を受けるアプリを、継承されたTCC権限を持つ一般的なNode.jsプロセスとして使用できます。たとえば、アプリがアドレス帳へのアクセス権を付与されている場合、攻撃者はアプリをNode.jsとして実行し、そのアドレス帳アクセスを継承する任意のコードを実行できます。これは一般に「Living off the land」攻撃として知られています。攻撃者は通常、PowerShell、Bash、または同様のツールを使用して、任意のコードを実行します。

影響を受けていますか?

デフォルトでは、Electronのすべてのリリースバージョンでは、runAsNodeおよびenableNodeCliInspectArguments機能が有効になっています。Electron Fusesドキュメントの説明に従って、これらの機能をオフにしていない場合、アプリは「Living off the land」攻撃として使用される脆弱性が同様にあります。繰り返しになりますが、攻撃者は被害者のマシンでコードやプログラムをすでに実行できる必要があることを強調する必要があります。

緩和策

この問題を緩和する最も簡単な方法は、Electronアプリ内でrunAsNodeヒューズを無効にすることです。runAsNodeヒューズは、ELECTRON_RUN_AS_NODE環境変数が尊重されるかどうかを切り替えます。これらのヒューズを切り替える方法については、Electron Fusesドキュメントを参照してください。

このヒューズが無効になっている場合、メインプロセス内のprocess.forkは、機能するためにこの環境変数に依存しているため、期待どおりに機能しないことに注意してください。代わりに、Sqliteサーバープロセスや同様のシナリオのように、スタンドアロンのNode.jsプロセスが必要な多くのユースケースに対応するユーティリティプロセスを使用することをお勧めします。

Electronアプリに推奨するセキュリティのベストプラクティスについては、セキュリティチェックリストで詳細を確認できます。