macOS Office Sandbox Bypasses

Support HackTricks

Word Sandbox bypass via Launch Agents

アプリケーションは、権限 com.apple.security.temporary-exception.sbpl を使用して カスタムサンドボックス を使用しており、このカスタムサンドボックスでは、ファイル名が ~$ で始まる限り、どこにでもファイルを書き込むことができます: (require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))

したがって、エスケープは plist LaunchAgent を ~/Library/LaunchAgents/~$escape.plist に書き込むのと同じくらい簡単でした。

元のレポートはこちらを確認してください。

Word Sandbox bypass via Login Items and zip

最初のエスケープから、Word は ~$ で始まる任意のファイルを書き込むことができることを思い出してください。ただし、前の脆弱性のパッチ後は、/Library/Application Scripts/Library/LaunchAgents に書き込むことはできませんでした。

サンドボックス内から Login Item(ユーザーがログインしたときに実行されるアプリ)を作成できることが発見されました。ただし、これらのアプリは ノータライズされていない限り 実行されず、引数を追加することはできません(したがって、単に bash を使用してリバースシェルを実行することはできません)。

前のサンドボックスバイパスから、Microsoft は ~/Library/LaunchAgents にファイルを書き込むオプションを無効にしました。ただし、Login Item として zip ファイル を置くと、Archive Utility はその場所に 解凍 します。したがって、デフォルトでは ~/LibraryLaunchAgents フォルダーが作成されないため、LaunchAgents/~$escape.plist に plist を zip し、~/Library に zip ファイルを 配置 することで、解凍時に永続性の宛先に到達することができました。

元のレポートはこちらを確認してください。

Word Sandbox bypass via Login Items and .zshenv

(最初のエスケープから、Word は ~$ で始まる任意のファイルを書き込むことができることを思い出してください)。

ただし、前の技術には制限があり、~/Library/LaunchAgents フォルダーが他のソフトウェアによって作成されている場合、失敗します。したがって、これに対して異なる Login Items チェーンが発見されました。

攻撃者は、実行するペイロードを持つ .bash_profile.zshenv ファイルを作成し、それらを zip して 被害者の ユーザーフォルダーに書き込むことができます: ~/~$escape.zip

次に、zip ファイルを Login Items に追加し、Terminal アプリを追加します。ユーザーが再ログインすると、zip ファイルはユーザーファイルに解凍され、.bash_profile.zshenv が上書きされ、そのためターミナルはこれらのファイルのいずれかを実行します(bash または zsh が使用されるかによって異なります)。

元のレポートはこちらを確認してください。

Word Sandbox Bypass with Open and env variables

サンドボックス化されたプロセスからは、open ユーティリティを使用して他のプロセスを呼び出すことがまだ可能です。さらに、これらのプロセスは 独自のサンドボックス内 で実行されます。

open ユーティリティには、特定の環境 変数でアプリを実行するための --env オプションがあることが発見されました。したがって、サンドボックス内のフォルダーに .zshenv ファイル を作成し、open を使用して --envHOME 変数 をそのフォルダーに設定し、その Terminal アプリを開くことで、.zshenv ファイルを実行することができます(理由は不明ですが、__OSINSTALL_ENVIROMENT 変数を設定する必要もありました)。

元のレポートはこちらを確認してください。

Word Sandbox Bypass with Open and stdin

open ユーティリティは --stdin パラメータもサポートしていました(前のバイパス後は --env を使用できなくなりました)。

問題は、python が Apple によって署名されていても、quarantine 属性を持つスクリプトは 実行されない ということです。ただし、stdin からスクリプトを渡すことができるため、クアランティンされているかどうかをチェックしませんでした:

  1. 任意の Python コマンドを含む ~$exploit.py ファイルをドロップします。

  2. open –stdin='~$exploit.py' -a Python を実行します。これにより、Python アプリが標準入力としてドロップしたファイルを使用して実行されます。Python は喜んでコードを実行し、これは launchd の子プロセスであるため、Word のサンドボックスルールに束縛されません。

Support HackTricks

Last updated