MailDemon补丁分析:iOS 13.4.5 Beta与iOS 13.5

admin 2020年12月2日20:43:22评论34 views字数 2885阅读9分37秒阅读模式

摘要和TL; DR

除了Apple的MailDemon漏洞补丁之外,ZecOps研究团队还分析并比较了iOS 13.4.5 beta和iOS 13.5的MailDemon补丁。 

我们的分析得出的结论是,补丁程序有所不同,并且iOS 13.4.5 beta补丁程序不完整,在某些情况下仍可能会受到攻击。 

由于13.4.5 beta补丁不够用,因此Apple发布了完整的补丁,采用了另一种方法,此方法在iOS 13.5和iOS 12.4.7上完全解决了此问题,作为旧设备的特殊安全更新。 

这可能解释了为什么要花费大约一个月才能发布完整补丁。 

iOS 13.4.5 Beta补丁

以下是iOS 13.4.5 beta上的堆溢出漏洞修补程序。  

如果-[MFMutableData _mapMutableData]返回false,则函数-[MFMutableData appendBytes:length:]引发异常。

MailDemon补丁分析:iOS 13.4.5 Beta与iOS 13.5

为了查看何时[[MFMutableData _mapMutableData]返回false,让我们看一下它是如何实现的:

MailDemon补丁分析:iOS 13.4.5 Beta与iOS 13.5

当mmap失败时,它返回False,但仍分配一个8字节的块并将指针存储在self-> bytes中。此修补程序在将数据复制到self-> bytes之前引发异常,从而部分解决了堆溢出问题

 -[MFMutableData appendData:] | +--  -[MFMutableData appendBytes:length:] **<-patch**    |    +-- -[MFMutableData _mapMutableData]

该修补程序确保在-[MFMutableData appendBytes:length:]内部引发异常。但是,还有其他函数调用-[MFMutableData _mapMutableData]并与self-> bytes交互,如果mmap失败,则将是8字节的块,这些函数不会检查mmap是否失败,因为补丁只会影响-[MFMutableData appendBytes:length:]。

以下是从MobileMail获取的实际回溯:

* frame #0: 0x000000022a0fd018 MIME`-[MFMutableData _mapMutableData:]   frame #1: 0x000000022a0fc2cc MIME`-[MFMutableData bytes] + 108   frame #2: 0x000000022a0fc314 MIME`-[MFMutableData mutableBytes] + 52   frame #3: 0x000000022a0f091c MIME`_MappedAllocatorAllocate + 76   frame #4: 0x0000000218cd4e9c CoreFoundation`_CFRuntimeCreateInstance + 324   frame #5: 0x0000000218cee5c4 CoreFoundation`__CFStringCreateImmutableFunnel3 + 1908   frame #6: 0x0000000218ceeb04 CoreFoundation`CFStringCreateWithBytes + 44   frame #7: 0x000000022a0eab94 MIME`_MFCreateStringWithBytes + 80   frame #8: 0x000000022a0eb3a8 MIME`_filter_checkASCII + 84   frame #9: 0x000000022a0ea7b4 MIME`MFCreateStringWithBytes + 136
-[MFMutableData mutableBytes]|+--  -[MFMutableData bytes]   |   +--  -[MFMutableData _mapMutableData:]

由于mutableBytes返回的字节通常被认为是可修改的,具体请参见Apple的文档(https://developer.apple.com/documentation/foundation/nsmutabledata/1410770-mutablebytes)

此属性类似于但不同于bytes属性。bytes属性包含一个指向常量的指针。您可以使用字节指针读取由数据对象管理的数据,但不能修改该数据。但是,如果mutableBytes属性包含非null指针,则此指针指向可变数据。您可以使用mutableBytes指针来修改由数据对象管理的数据。

苹果的文档

如果mmap失败,则[[MFMutableData mutableBytes]和-[MFMutableData bytes]都将返回self-> bytes指向8字节的块,这在某些情况下可能导致堆溢出。

以下是一个如何出错的示例,即使在memcpy之前检查了长度,堆仍然会发生溢出:

size_t length = 0x30000;MFMutableData* mdata = [MFMutableData alloc];data = malloc(length);[mdata initWithBytesNoCopy:data length:length];    size_t mdata_len = [mdata length];char* mbytes = [mdata mutableBytes];//mbytes could be a 8-bytes chunksize_t new_data_len = 90;char* new_data = malloc(new_data_len);if (new_data_len <= mdata_len) {    memcpy(mbytes, new_data, new_data_len);//heap overflow if mmap fails}

iOS 13.5补丁

在iOS 13.5修补程序之后,mmap失败并且紧接着不再返回8字节的块之后,“-[MFMutableData _mapMutableData]”中引发了异常。这种方法可以完全解决该问题。

MailDemon补丁分析:iOS 13.4.5 Beta与iOS 13.5

概要

iOS 13.5修补程序是修补堆溢出漏洞的正确方法。仔细检查安全补丁并确认补丁已完成很重要。 

在ZecOps,我们帮助开发人员发现安全漏洞,并验证问题是否已自动正确解决。如果您想在您的应用程序/程序中找到类似的漏洞,我们现在将其他用户添加到我们的CrashOps SDK beta程序中(https://www.crashops.com/)。 
如果您没有应用程序,并且想检查手机是否存在可疑活动,请查看ZecOps iOS DFIR解决方案(https://zecops.com/solutions/gluon.html)– Gluon

本文翻译自:https://blog.zecops.com/vulnerabilities/hidden-demons-maildemon-patch-analysis-ios-13-4-5-beta-vs-ios-13-5/

MailDemon补丁分析:iOS 13.4.5 Beta与iOS 13.5

本文始发于微信公众号(Ots安全):MailDemon补丁分析:iOS 13.4.5 Beta与iOS 13.5

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年12月2日20:43:22
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   MailDemon补丁分析:iOS 13.4.5 Beta与iOS 13.5http://cn-sec.com/archives/194940.html

发表评论

匿名网友 填写信息