macOS Archive工具漏洞可绕过Gatekeeper检查,未签名的应用也可以在不向用户展示安全提醒的情况下执行。
Archive Utility是macOS系统自带的归档实用工具。Jamf Threat Labs安全研究人员在macOS Archive工具中发现了一个安全漏洞,漏洞CVE编号CVE-2022-32910。攻击者利用该漏洞可以构造压缩文件可以在不向用户展示安全提醒的情况下执行未签名的应用。
Archive工具可以提取不同压缩文件格式,包括7-ZIP、ZIP、TAR、CPIO、GZIP 和Apple Archive。一般情况下,双击支持的文件格式默认会使用Archive工具来处理压缩文件的解压缩。
漏洞分析
研究人员使用aa命令创建包含图片的压缩文件,目录结构如下所示:
aa archive -d images -o myPictures.aar
该压缩文件中含有images目录中的所有文件和文件夹,并输出名为myPictures.aar的压缩文件。如果压缩文件是下载的,且没有解压,目录结构如下所示:
然后,研究人员使用相同命令在该文件夹中添加一个文件4.png:
然后,再次下载压缩文件,并打开:
使用Archive工具解压后,可以看到明显的区别:myPictures.aar文件解压后,Archive工具会创建一个名为myPictures的文件夹,其中含有文件4.png,myPictures文件夹中不含有com.apple.quarantine 扩展属性,但是其中的文件4.png包含该属性。
在解压过程中,包括Archive Utility、AUHelperService和ArchiveService在内的多个进程都包含在内。研究人员使用苹果的终端安全工具监控了文件使用,发现ArchiveService进程将提取的内容写入到了以下临时目录:
/private/var/folders/{2-random-characters}/{31-random-characters}/T/com.apple.fileprovider.ArchiveService/TemporaryItems/NSIRD_ArchiveService_{6-random-characters}
Archive工具中包含一个名为_propagateQuarantineInformation的函数。ArchiveService进程确保quarantine属性在文件转移到目标位置前传播到了所有提取的内容中。并调用了libquarantine.dylib中的底层函数_qtn_file_apply_to_path,将quarantine属性应用到位于NSIRD_ArchiveService_XXXXXX 临时目录的解压文件中。
{ "event": "ES_EVENT_TYPE_NOTIFY_RENAME", "file": { "proc_path": "/System/Library/CoreServices/Applications/Archive Utility.app/Contents/XPCServices/AUHelperService.xpc/Contents/MacOS/AUHelperService", "destination": "/Users/jpcore/Downloads/myPictures", "original": "/private/var/folders/pp/slmzl7sd41z3h1rc4wqdndxr0000gn/T/com.apple.fileprovider.ArchiveService/TemporaryItems/NSIRD_ArchiveService_0uhVx9", "pid": 3718 }, "timestamp": "2022-09-16 14:43:19" }
但ArchiveService并未将quarantine属性应用到NSIRD_ArchiveService_XXXXXX文件夹,只应用到了提取的文件中。
AUHelperService调用_decompressMoveCopyResults 函数来将提取的内容从临时目录转移到目标位置,具体过程如下图所示:
· 函数提取路径到临时文件夹中的提取压缩文件中;
· 函数提取路径到下周的压缩文件中;
· 从路径中提取压缩文件的文件名;
· 移除压缩文件的文件扩展名。
· 最终,myPictures文件夹中没有quarantine属性。
漏洞利用
漏洞利用条件:
· 压缩文件的文件名必须包含.app扩展,比如test.app.aar;
· 在目标目录的根目录下(test.app/))有2个以上的文件或文件夹,这会引起临时目录自动重命名;
· 只有app中的文件和文件夹被压缩, test.app目录除外;
漏洞利用:
使用aa工具可以构造压缩文件:
aa archive -d test.app -o test.app.aar
用户下载和打开该压缩文件,使用Archive工具打开:
可以看到其中没有quarantine属性,因此可以绕过Gatekeeper检查,因此所有未签名的二进制文件可以执行。
研究人员使用Apple Archives格式进行了测试,但使用zip文件格式也可以完成绕过。
漏洞修复
研究人员于2022年5月31日将该漏洞提交给了苹果公司。苹果公司已于2022年7月20日修复了该漏洞。
苹果公司通过额外调用_qtn_file_apply_to_path来更新_propagateQuarantineInformation 函数的方式修复了该漏洞。修复后,临时文件夹NSIRD_ArchiveService_XXXXXX在重命名之前已经应用了quarantine属性。
本文翻译自:https://www.jamf.com/blog/jamf-threat-labs-macos-archive-utility-vulnerability/如若转载,请注明原文地址