IOS中可以查看手机已安装应用的漏洞详解

  • A+

译文声明
本文是翻译文章,文章原作者 Chilik Tamir
原文地址:https://blog.zimperium.com/p-for-privacy-the-background-story-of-cve-2020-9773/
译文仅供参考,具体内容表达以及含义以原文为准

image.png

受影响的组件:所有iOS版本<14.0 LSDIconCache

最新漏洞版本:iOS 13.7

供应商:苹果公司

CVE :CVE-2020-9773

概要

沙盒应用程序可以避开iOS更新的限制,以显示设备上已安装的应用程序。

影响力

恶意应用程序可能能够跟踪,访问和枚举当前设备安装的应用程序。

背景

在移动设备上列出已安装的应用程序已经吸引了广告经纪人的青睐。标识移动用户的首选方法之一是列出已安装的应用程序及其应用程序路径。

优化在应用程序上的广告展示率是该市场关注的重点,这就是为什么枚举已安装的应用程序是很好的解决方案的原因,因为它可以帮助广告商协调广告展示,并且广告商经理可以在多个应用程序之间同步他的工作。

苹果公司致力于保护其iOS / iPadOS操作系统中的隐私问题。在iOS的发展过程中,我们目睹了不断致力于改善许多隐私问题,例如改善用户对GPS,日历,联系人和照片使用的同意,限制Mac地址枚举,与新主机配对,安装配置文件等等。

猫与老鼠游戏

从隐私的角度来看,列举已安装的应用程序会对用户的隐私产生重大影响,因为它很容易被滥用来表征和标记用户以及其泄露个人资料。这就是为什么(就像在猫和老鼠游戏中一样)苹果公司正在积极删除任何允许第三方和恶意应用程序列出已安装的应用程序的API,反之亦然,对手们正在积极寻求新的方法来规避这些措施。

例如,随着iOS及其沙箱的发展,一些私有API调用被阻止以减轻对已安装应用程序的枚举,例如[LSApplicationWorkspace defaultWorkspace] allInstalledApplications]的私有API调用已在iOS 11.0中进行了修补,并且可以看到在此博客文章中可以看到:

image.png

那篇文章中建议的绕过iOS 11上的应用程序列表的方法是选择一个不同的私有框架(MobileContainerManager框架),并使用其MCMAppContiner类的API来完成相同的工作。

例如,以下代码片段将使用新的专用API来检查PokemonGo应用程序是否已安装在当前设备上:

image.png

从输出窗口中可以看到,此调用被Apple在iOS 12.0 Beta上阻止,方法是通过权利检查的形式来防止此项操作

image.png

图标缓存

iOS / iPadOS生态系统上的每个应用程序都由一个唯一的图标表示。这些图标由应用程序开发人员创建,用于帮助用户识别Apple各种操作系统上的应用程序并与之交互。

在应用程序安装过程中,iOS / iPadOS操作系统将应用程序图标缓存为转换后的Apple格式,并使用该缓存文件为用户表示应用程序。

漏洞

所有缓存的图标都存储在一个持久文件夹中。此文件夹的路径在每个设备和每个用户中都是恒定的。发现该文件夹可从沙箱中全局读取。导致在任何设备上的任何应用程序都可以读取图标缓存文件夹的内容并处理缓存的图标文件。因此,任何应用程序都可以枚举已安装应用程序的列表。

技术细节

LSD正在使用全局可读取文件夹来存储iOS图标缓存文件。图标缓存以Apple的BGRA32专有格式存储。任何应用程序都可以绕过沙箱并访问此文件夹以枚举这些图标并影响iOS用户的隐私。

LSD图标缓存格式

LSD使用的图标缓存格式可以很容易地修改,以下是iOS 13.3 Beta上此标头的示例:

image.png

存储

图标缓存存储位于: / private / var / containers / Shared / SystemGroup / systemgroup.com.apple.lsd.iconscache / Library / Caches / com.apple.IconsCache /文件系统路径。

概念证明

在最新的beta iOS设备上,我们安装了几个应用程序,如下图所示:

image.png

接下来证明应用程序通过枚举设备上每个已安装的应用程序并将其图标以常规png格式保存在其文档文件夹中的方式来演示此漏洞。相关示例逻辑如下:

image.png

image.png

可以使用PoCAppList文件夹中的文件应用程序直接查看该图标,如下所示:

image.png

修复

Apple已在iOS / iPadOS 14.0上修复了此问题。我们建议用户升级到最新的iOS版本。