速看!谷歌公开至少值500万美元的多个 iOS 漏洞详情和 PoC
字数 2483 2025-08-18 11:38:49
iOS无交互漏洞分析与防护指南
漏洞概述
2019年7月,谷歌Project Zero团队公开了6个影响iOS操作系统的"无交互"安全漏洞,其中5个提供了详细信息和PoC。这些漏洞可通过iMessage客户端利用,已在iOS 12.4版本中修复。这些漏洞在漏洞市场上的估值高达500万至2400万美元,因其无需用户交互即可远程执行代码的特性而极具价值。
漏洞详情
1. CVE-2019-8647 (高危)
- 类型:释放后使用漏洞
- 位置:Core Data框架
- 影响:任意代码执行
- 触发方式:通过iMessage客户端远程触发
- 技术细节:
- 使用
NSArray initWithCoder方法时发生不安全的反序列化 _PFArray作为NSArray的子类,在反序列化时通过[NSArray initWithCoder:]被反序列化- 最终调用
[_PFArray initWithObjects:count:]方法时未保留对对象的引用 - 当NSKeyedUnarchiver发布时,数组中的对象也被发布,即使这些对象仍在使用中
- 使用
2. CVE-2019-8660 (中危)
- 类型:内存损坏漏洞
- 位置:Core Data框架和Siri组件
- 影响:应用程序异常终止或任意代码执行
- 技术细节:
- 解码类
NSKnownKeysDictionary1的对象时产生内存损坏 - 在解码键之前解码长度member,导致在检查长度之前使用映射策略
- 分配缓冲区时未进行整数溢出检查
- 解码值数组为null时,getObjects:range不执行任何操作,导致后续循环将values数组中的条目复制到缓冲区时越界
- 解码类
3. CVE-2019-8662 (高危)
- 类型:释放后使用漏洞
- 位置:QuickLook组件
- 影响:任意代码执行
- 技术细节:
- 使用NSArchiver API反序列化NSObject时,白名单中的类的子类也会被反序列化
OITSUIntDictionary继承自NSDictionary,其initWithCoder:在unarchiving期间被调用- 字典的后备存储设置为
CFDictionaryCreateMutable的结果,未提供键值和值回调 - 反序列化字典的元素后导致使用后释放的问题
4. CVE-2019-8646 (高危)
- 类型:文件读取漏洞
- 位置:Siri和Core Data组件
- 影响:远程读取iOS设备上的文件内容
- 技术细节:
- 可反序列化
_NSDataFileBackedFuture类,该类是文件支持的NSData对象 - 调用[NSDatabytes]选择器时将本地文件加载到内存中
- 允许创建长度不同于字节数组长度的NSData对象,导致越界读取和可能的越界写入
- 可反序列化
5. CVE-2019-8624 (中危)
- 类型:越界读取漏洞
- 位置:watchOS的Digital Touch组件
- 影响:Apple Watch Series 1及后续版本
- 技术细节:
- 格式错误的Tap消息包含points阵列和delta阵列短的颜色数组
[ETTapMessage initWithArchiveData:]方法检查points数组的长度是增量数组的两倍- 但只检查colors数组的长度是否超过8个字节,即使每个point-delta对都需要一种颜色
漏洞复现方法
通用复现步骤
- 安装frida (
pip3 install frida) - 修改sendMessage.py中的目标设备电话号码或电子邮件
- 在injectMessage.js中用obj文件路径替换标记"PATH"
- 在本地目录运行:
python3 sendMessage.py
各漏洞特定复现文件
- CVE-2019-8647: pfarray.zip
- CVE-2019-8660: knownkeydict
- CVE-2019-8662: 复现代码
- CVE-2019-8646: filebacked.zip
- CVE-2019-8624: tapcrash.zip
漏洞发现方法
自动化检测技术
- 使用IDAPython脚本在加载了iOS dyld_shared_cache的IDA Pro中运行
- 枚举所有系统库并确定从白名单类继承的类
- 将允许通过NSKeyedUnarchiver反序列化的类写入磁盘
- 通过归档有效的父类并替换为子类名称进行测试
- 反序列化归档并调用常用方法观察是否崩溃
测试工具
- archiveDict.m: 生成有效的NSDictionary存档
- unarchiveDict.m: 将存档反序列化为NSDictionary实例
防护措施
- 立即更新系统:安装iOS 12.4或更高版本,这些版本已修复上述漏洞
- 禁用iMessage:对于高安全需求用户,可考虑暂时禁用iMessage功能
- 应用沙箱限制:确保应用运行在严格的沙箱环境中
- 输入验证:对所有反序列化操作实施严格的白名单控制
- 内存安全:使用现代编程语言特性或工具防止内存损坏问题
- 安全编码实践:遵循NSSecureCoding协议实现安全的反序列化
漏洞价值分析
这些无交互iOS漏洞在漏洞市场上的估值极高:
- Zerodium: 每个漏洞超过100万美元
- Crowdfense: 每个漏洞200万至400万美元
- 总计估值: 500万至2400万美元
高价值原因:
- 无需用户交互即可触发
- 可远程执行代码
- 影响最新iOS版本
- 通过系统预装应用(iMessage)触发
- 可用于构建完整的攻击工具链
总结
这些漏洞展示了iOS系统中反序列化和内存处理机制的深层次安全问题。安全研究人员和开发人员应:
- 深入理解系统框架的安全机制
- 严格验证所有输入数据
- 实现安全的编码和解码实践
- 及时应用安全更新
- 关注Project Zero等安全团队的最新研究成果
通过分析这些高价值漏洞,我们可以更好地理解现代移动操作系统面临的威胁,并采取有效措施保护用户安全。