macOS Office Sandbox Bypasses
ランチエージェントを使用したWord Sandboxバイパス
アプリケーションは、com.apple.security.temporary-exception.sbpl
という権限を使用するカスタムサンドボックスを使用しており、このカスタムサンドボックスでは、ファイル名が~$
で始まる限り、どこにでもファイルを書き込むことができます:(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))
したがって、エスケープは、~/Library/LaunchAgents/~$escape.plist
にplist
ランチエージェントを書き込むだけで簡単でした。
元のレポートはこちらを確認してください。
ログインアイテムとzipを使用したWord Sandboxバイパス
最初のエスケープから、Wordは~$
で始まる任意のファイルを書き込むことができますが、前の脆弱性のパッチ後は/Library/Application Scripts
や/Library/LaunchAgents
に書き込むことはできませんでした。
サンドボックス内からは、ログインアイテム(ユーザーがログインすると実行されるアプリ)を作成できることがわかりました。ただし、これらのアプリはノータライズされていないと実行されず、引数を追加することはできません(つまり、**bash
**を使用して逆シェルを実行することはできません)。
前のサンドボックスバイパスから、Microsoftは~/Library/LaunchAgents
にファイルを書き込むオプションを無効にしました。しかし、LaunchAgents
フォルダが~/Library
にデフォルトで作成されないため、LaunchAgents/~$escape.plist
にplistをzipして、zipファイルを**~/Library
**に配置すると、解凍時に永続的な宛先に到達するようになりました。
元のレポートはこちらを確認してください。
ログインアイテムと.zshenvを使用したWord Sandboxバイパス
(最初のエスケープから、Wordは~$
で始まる任意のファイルを書き込むことができます)。
ただし、前のテクニックには制限がありました。他のソフトウェアが作成したために~/Library/LaunchAgents
フォルダが存在する場合、失敗する可能性がありました。このため、このための異なるログインアイテムチェーンが発見されました。
攻撃者は、実行するペイロードを持つ**.bash_profile
と.zshenv
ファイルを作成し、それらをzipして、被害者のユーザーフォルダにzipファイルを書き込むことができました:~/~$escape.zip
**。
次に、zipファイルをログインアイテムに追加し、**Terminal
アプリを追加します。ユーザーが再ログインすると、zipファイルがユーザーのファイルに解凍され、.bash_profile
と.zshenv
**が上書きされ、したがって、ターミナルはこれらのファイルのいずれかを実行します(bashまたはzshが使用されているかに応じて)。
元のレポートはこちらを確認してください。
Openと環境変数を使用したWord Sandboxバイパス
サンドボックス化されたプロセスからは、open
ユーティリティを使用して他のプロセスを呼び出すことができます。さらに、これらのプロセスは独自のサンドボックス内で実行されます。
open
ユーティリティには、特定の環境変数でアプリを実行するための**--env
オプションがあることがわかりました。したがって、サンドボックス内のフォルダに.zshenv
ファイル**を作成し、HOME
変数をそのフォルダに設定してTerminal
アプリを開くopen
を使用することで、.zshenv
ファイルを実行できました(何らかの理由で__OSINSTALL_ENVIROMENT
変数を設定する必要がありました)。
元のレポートはこちらを確認してください。
Openとstdinを使用したWord Sandboxバイパス
**open
ユーティリティは--stdin
**パラメータもサポートしていました(前のバイパス後、--env
を使用することはできなくなりました)。
重要なのは、Appleによって署名された**python
でも、quarantine
**属性を持つスクリプトは実行されないことです。ただし、stdinからスクリプトを渡すことで、それが隔離されているかどうかをチェックしないで実行できました:
任意のPythonコマンドを含む**
~$exploit.py
**ファイルを作成します。open **
–stdin='~$exploit.py' -a Python
**を実行します。これにより、Pythonアプリが、標準入力として提供されたファイルを使用して実行されます。 Pythonは喜んでコードを実行し、_launchd_の子プロセスであるため、Wordのサンドボックスルールには拘束されません。
Last updated