在ZecOps 团队宣布在iOS的默认邮件应用程序中发现RCE漏洞之后,已经有很多用户联系了他们,他们怀疑自己成为了这个漏洞的攻击目标。
在这篇文章中,我们将介绍一种简单的方法来喷洒堆,通过这种方法,我们可以证明远程利用这个漏洞是可能的。除此之外,我们还将提供两个在野外观察到的触发器示例。
目前,我们已经发现了该漏洞具有以下攻击性能:
1.邮件应用程序中的远程堆溢出;
2.能够通过传入邮件由攻击者控制的输入内容来远程触发漏洞;
3.改变代码执行的能力;
4.事实提升访问内核的权限;
不过,我们并没有发现该漏洞可以泄漏消息,但让人感到惊讶是,奇热信息泄漏并不是存在于邮件中,而是存在于其他过程中。因为dyld_shared_cache是通过大多数进程共享的,因此信息泄漏漏洞不一定必须存在于MobileMail中,例如iMessage的CVE-2019-8646也可以远程实现这个功能,这就打开了额外的攻击面(Facetime、其他应用、iMessage等)。本文,我们会远程利用这个漏洞所具有的所有特性。尽管如此,我们还是要做以下说明:
1.我们无意公开LPE,它允许我们在需要时对A12及更高版本的设备执行文件系统提取或内存检查。你可以在FreeTheSandbox.org 上了解更多关于移动设备的漏洞信息。
2.我们还没有在野外看到对本地特权升级(LPE)漏洞的利用;
我们还将分享我们在野外看到的两个触发器示例,并让你做出自己的推断和结论。
MailDemon赏金
最后,对于那些能够证明他们遭到攻击的示例,我们将提供赏金。
利用MailDemon
如前所述,MailDemon是一个很好的利用对象,因为它覆盖了MALLOC_NANO内存区域的模块,而MALLOC_NANO内存区域存储了大量的Objective-C对象。因此,它允许攻击者操纵已被攻击对象的ISA指针(允许他们引起类型混淆)或重写函数指针来控制进程的代码流,这是接管受影响过程的可行方法。
堆喷和堆整理技术
为了控制代码流,需要进行堆喷射以将制作的数据放入内存中。使用包含“dealloc”方法的伪方法缓存的伪造类,我们可以使用此方法触发漏洞后控制程序计数器(PC)寄存器。
下面是测试POC时生成的部分崩溃日志:
Exception Type: EXC_BAD_ACCESS (SIGBUS) Exception Subtype: EXC_ARM_DA_ALIGN at 0xdeadbeefdeadbeef VM Region Info: 0xdeadbeefdeadbeef is not in any region. Bytes after previous region: 16045690973559045872 REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL MALLOC_NANO 0000000280000000-00000002a0000000 [512.0M] rw-/rwx SM=PRV ---> UNUSED SPACE AT END Thread 18 name: Dispatch queue: com.apple.CFNetwork.Connection Thread 18 Crashed: 0 ??? 0xdeadbeefdeadbeef 0 + -2401053088876216593 1 libdispatch.dylib 0x00000001b7732338 _dispatch_lane_serial_drain$VARIANT$mp + 612 2 libdispatch.dylib 0x00000001b7732e74 _dispatch_lane_invoke$VARIANT$mp + 480 3 libdispatch.dylib 0x00000001b773410c _dispatch_workloop_invoke$VARIANT$mp + 1960 4 libdispatch.dylib 0x00000001b773b4ac _dispatch_workloop_worker_thread + 596 5 libsystem_pthread.dylib 0x00000001b796a114 _pthread_wqthread + 304 6 libsystem_pthread.dylib 0x00000001b796ccd4 start_wqthread + 4 Thread 18 crashed with ARM Thread State (64-bit): x0: 0x0000000281606300 x1: 0x00000001e4b97b04 x2: 0x0000000000000004 x3: 0x00000001b791df30 x4: 0x00000002827e81c0 x5: 0x0000000000000000 x6: 0x0000000106e5af60 x7: 0x0000000000000940 x8: 0x00000001f14a6f68 x