macOS Office Sandbox Bypasses
Word Sandbox 通过 Launch Agents 绕过
该应用程序使用 自定义沙箱,使用权限 com.apple.security.temporary-exception.sbpl
,此自定义沙箱允许在任何地方写入文件,只要文件名以 ~$
开头:(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))
因此,逃逸的方式就是 在 ~/Library/LaunchAgents/~$escape.plist
中写入一个 plist
启动代理。
查看 原始报告。
Word Sandbox 通过登录项和 zip 绕过
请记住,从第一次逃逸开始,Word 可以写入以 ~$
开头的任意文件,尽管在之前漏洞的修补后,无法在 /Library/Application Scripts
或 /Library/LaunchAgents
中写入。
发现从沙箱内可以创建 登录项(用户登录时将执行的应用程序)。但是,这些应用程序 不会执行,除非 它们 经过公证,并且 无法添加参数(因此不能仅使用 bash
运行反向 shell)。
在之前的沙箱绕过中,微软禁用了在 ~/Library/LaunchAgents
中写入文件的选项。然而,发现如果将 zip 文件作为登录项,Archive Utility
将会 解压 到其当前位置。因此,由于默认情况下 ~/Library
中不会创建 LaunchAgents
文件夹,可以 将 plist 压缩到 LaunchAgents/~$escape.plist
中,并 将 zip 文件放置在 ~/Library
中,这样解压时将到达持久性目标。
查看 原始报告。
Word Sandbox 通过登录项和 .zshenv 绕过
(请记住,从第一次逃逸开始,Word 可以写入以 ~$
开头的任意文件)。
然而,之前的技术有一个限制,如果 ~/Library/LaunchAgents
文件夹存在,因为其他软件创建了它,则会失败。因此,发现了一个不同的登录项链。
攻击者可以创建 .bash_profile
和 .zshenv
文件,包含要执行的有效载荷,然后将它们压缩并 写入受害者 的用户文件夹:~/~$escape.zip
。
然后,将 zip 文件添加到 登录项,然后是 Terminal
应用程序。当用户重新登录时,zip 文件将被解压到用户文件中,覆盖 .bash_profile
和 .zshenv
,因此,终端将执行其中一个文件(取决于使用的是 bash 还是 zsh)。
查看 原始报告。
Word Sandbox 通过 Open 和 env 变量绕过
从沙箱进程中,仍然可以使用 open
工具调用其他进程。此外,这些进程将在 自己的沙箱 中运行。
发现 open 工具具有 --env
选项,可以使用 特定的 env 变量运行应用程序。因此,可以在 沙箱内 的文件夹中创建 .zshenv
文件,并使用 open
和 --env
将 HOME
变量 设置为该文件夹,打开 Terminal
应用程序,这将执行 .zshenv
文件(出于某种原因,还需要设置变量 __OSINSTALL_ENVIROMENT
)。
查看 原始报告。
Word Sandbox 通过 Open 和 stdin 绕过
open
工具还支持 --stdin
参数(在之前的绕过后,无法再使用 --env
)。
问题是,即使 python
是由 Apple 签名的,它也 不会执行 带有 quarantine
属性的脚本。然而,可以通过 stdin 传递脚本,这样就不会检查它是否被隔离:
放置一个
~$exploit.py
文件,包含任意 Python 命令。运行 open
–stdin='~$exploit.py' -a Python
,这将使用我们放置的文件作为标准输入运行 Python 应用程序。Python 高兴地运行我们的代码,并且由于它是 launchd 的子进程,因此不受 Word 沙箱规则的限制。
Last updated