"runAsNode" CVEに関する声明
本日早朝、Electronチームは、いくつかの注目すべきElectronアプリに対して最近公開された複数のCVEについて警告を受けました。これらのCVEは、ElectronのヒューズであるrunAsNode
とenableNodeCliInspectArguments
の2つに関連しており、これらのコンポーネントが積極的に無効化されていない場合、リモート攻撃者がこれらのコンポーネントを介して任意のコードを実行できると誤って主張しています。
これらの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(LOTL)攻撃」として知られています。攻撃者は通常、PowerShell、Bash、または同様のツールを使用して任意のコードを実行します。
影響を受けますか?
デフォルトでは、リリースされているすべてのバージョンのElectronでrunAsNode
とenableNodeCliInspectArguments
機能が有効になっています。Electronヒューズのドキュメントで説明されているようにオフにしていない場合、アプリは「Living off the land」攻撃に使用されるのと同じように脆弱です。繰り返しますが、攻撃者は犠牲者のマシンでコードとプログラムを既に実行できる必要があることを強調する必要があります。
軽減策
この問題を軽減する最も簡単な方法は、Electronアプリ内でrunAsNode
ヒューズを無効にすることです。runAsNode
ヒューズは、ELECTRON_RUN_AS_NODE
環境変数が尊重されるかどうかを切り替えます。Electronヒューズのドキュメントを参照して、これらのヒューズの切り替え方法を確認してください。
このヒューズを無効にすると、メインプロセスでのprocess.fork
は、機能するためにこの環境変数に依存しているため、期待通りに機能しなくなります。代わりに、スタンドアロンのNode.jsプロセス(Sqliteサーバープロセスなどのシナリオ)が必要な多くのユースケースで機能するユーティリティプロセスの使用をお勧めします。
Electronアプリに関して推奨するセキュリティベストプラクティスに関する詳細は、当社のセキュリティチェックリストをご覧ください。