macOS Electron Applications Injection
AWSハッキングの学習と実践:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングの学習と実践:
HackTricks Training GCP Red Team Expert (GRTE)
基本情報
Electronが何かわからない場合は、こちらで多くの情報を見つけることができます。ただし、今のところは、Electronがnodeを実行することを知っておくだけで十分です。 そして、nodeには、指定されたファイル以外のコードを実行するために使用できるパラメータや環境変数がいくつかあります。
Electron Fuses
これらのテクニックは次に議論されますが、最近のElectronにはこれらを防ぐためのいくつかのセキュリティフラグが追加されています。これらはElectron Fusesであり、macOSのElectronアプリケーションが任意のコードを読み込むのを防ぐために使用されるものです:
RunAsNode
: 無効にすると、環境変数**ELECTRON_RUN_AS_NODE
**の使用を防ぎ、コードのインジェクションを防ぎます。EnableNodeCliInspectArguments
: 無効にすると、--inspect
、--inspect-brk
などのパラメータが尊重されなくなります。これにより、コードのインジェクションが防止されます。EnableEmbeddedAsarIntegrityValidation
: 有効にすると、読み込まれた**asar
** ファイルがmacOSによって検証されます。このファイルの内容を変更してコードのインジェクションを防ぎます。OnlyLoadAppFromAsar
: これが有効になっている場合、次の順序で読み込みを検索する代わりに:app.asar
、app
、最後に**default_app.asar
。app.asarのみをチェックして使用するため、embeddedAsarIntegrityValidation
フューズと組み合わせると、検証されていないコードを読み込むことが不可能**になります。LoadBrowserProcessSpecificV8Snapshot
: 有効にすると、ブラウザプロセスはV8スナップショットにbrowser_v8_context_snapshot.bin
というファイルを使用します。
コードインジェクションを防ぐことはないが、興味深いフューズもあります:
EnableCookieEncryption: 有効にすると、ディスク上のクッキーストアがOSレベルの暗号化キーを使用して暗号化されます。
Electron Fusesの確認
アプリケーションからこれらのフラグを確認することができます:
Electron Fusesの変更
ドキュメントに記載 されているように、Electron Fusesの構成は、Electronバイナリ内に構成されており、どこかに文字列 dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX
が含まれています。
macOSアプリケーションでは、通常、application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework
に配置されています。
Electronアプリケーションへのコード追加によるRCE
Electronアプリケーションが使用している外部のJS/HTMLファイルが存在する可能性があり、攻撃者はこれらのファイルにコードをインジェクトし、その署名がチェックされないため、アプリケーションのコンテキストで任意のコードを実行できます。
ただし、現時点では2つの制限があります:
**
kTCCServiceSystemPolicyAppBundles
**権限が必要です。したがって、デフォルトではこれは不可能になりました。通常、コンパイルされた**
asap
ファイルには、embeddedAsarIntegrityValidation
およびonlyLoadAppFromAsar
のヒューズが有効**になっています。
これにより、この攻撃経路がより複雑になり(または不可能になり)ます。
kTCCServiceSystemPolicyAppBundles
の要件をバイパスすることが可能であり、アプリケーションを別のディレクトリ(たとえば/tmp
)にコピーし、フォルダ名を**app.app/Contents
からapp.app/NotCon
に変更し、悪意のあるコードでasarファイルを変更し、それをapp.app/Contents
**に戻して実行することができます。
asarファイルからコードを展開することができます。
そして、それを修正した後にパックし直します。
ELECTRON_RUN_AS_NODE
を使用した RCE
ELECTRON_RUN_AS_NODE
を使用した RCEドキュメントによると、この環境変数が設定されている場合、プロセスは通常の Node.js プロセスとして開始されます。
RunAsNode
フューズが無効になっている場合、環境変数 ELECTRON_RUN_AS_NODE
は無視され、これは機能しません。
アプリ Plist からのインジェクション
こちらで提案されているように、この環境変数を plist に悪用して持続性を維持することができます。
NODE_OPTIONS
を使用したRCE
NODE_OPTIONS
を使用したRCE異なるファイルにペイロードを保存して実行することができます:
EnableNodeOptionsEnvironmentVariable
が無効になっている場合、アプリは起動時に環境変数NODE_OPTIONSを無視します。ただし、環境変数**ELECTRON_RUN_AS_NODE
が設定されている場合は、その環境変数も無視されます。なお、RunAsNode
**が無効になっている場合も同様です。
ELECTRON_RUN_AS_NODE
を設定しないと、次のエラーが発生します: Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.
アプリPlistからのインジェクション
これらのキーを追加して持続性を維持するために、この環境変数をplistで悪用することができます:
検査によるRCE
こちらによると、Electronアプリケーションを**--inspect
、--inspect-brk
、--remote-debugging-port
**などのフラグを使用して実行すると、デバッグポートがオープンされ、それに接続できるようになります(たとえば、Chromeのchrome://inspect
から)。そのため、コードを注入したり、新しいプロセスを起動したりすることができます。
例えば:
EnableNodeCliInspectArguments
フューズが無効になっている場合、アプリは起動時に --inspect
のようなノードパラメータを無視しますが、環境変数 ELECTRON_RUN_AS_NODE
が設定されている場合は無視されます。ただし、フューズ RunAsNode
が無効になっている場合も同様です。
ただし、electron パラメータ --remote-debugging-port=9229
を使用することはできますが、前述のペイロードは他のプロセスを実行するためには機能しません。
--remote-debugging-port=9222
パラメータを使用すると、Electronアプリから履歴(GETコマンドで)やブラウザのクッキー(ブラウザ内で復号され、それらを提供するjsonエンドポイントがあるため)などの情報を盗むことができます。
これについては、こちらやこちらで詳しく学ぶことができ、自動ツール WhiteChocolateMacademiaNut や以下のようなシンプルなスクリプトを使用できます:
このブログポスト では、このデバッグを悪用して、ヘッドレスクロームが任意の場所に任意のファイルをダウンロードするようにします。
アプリ Plist からのインジェクション
この環境変数を plist で悪用することで、次のキーを追加して持続性を維持できます:
古いバージョンを悪用したTCCバイパス
macOSのTCCデーモンは、アプリケーションの実行バージョンをチェックしません。したがって、前述のいずれのテクニックでもElectronアプリケーションにコードをインジェクトできない場合は、以前のバージョンのAPPをダウンロードしてコードをインジェクトすることができます。それでもTCC権限を取得します(Trust Cacheがそれを防止しない限り)。
JSコード以外のコードを実行する
前述のテクニックを使用すると、Electronアプリケーションのプロセス内でJSコードを実行できます。ただし、子プロセスは親アプリケーションと同じサンドボックスプロファイルで実行され、TCC権限を継承します。 したがって、たとえばカメラやマイクへのアクセス権を悪用したい場合は、プロセスから別のバイナリを実行するだけで済みます。
自動インジェクション
ツールelectroniz3rは、インストールされている脆弱性のあるElectronアプリケーションを見つけ、それらにコードをインジェクトするのに簡単に使用できます。このツールは**--inspect
**テクニックを使用しようとします:
自分でコンパイルする必要があり、次のように使用できます:
参考文献
AWSハッキングの学習と実践:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングの学習と実践:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated