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