type
status
date
slug
summary
tags
category
icon
password
original_link
引言:tachy0n 0day及其背景
tachy0n是一个针对iOS 13.0到13.5的旧漏洞利用,于2020年5月23日在unc0ver v5.0.0中作为0day发布。它是一个标准的kernel LPE,但因作为0day影响最新iOS版本并导致Apple在一周内发布补丁而引人注目。该漏洞是Lightspeed bug的回归,由Pwn20wnd通过回归测试发现。
Lightspeed Bug详解
该漏洞位于lio_listio系统调用中,涉及aio_lio_context结构体的double free race condition。当没有IO被调度或IO完成过快时,可能导致lio_context指针悬空。利用此漏洞需要精确控制事件序列,通过UaF重新分配释放的内存,从而使两个不同的分配指向同一块内存。该漏洞利用了iOS 14之前kalloc.16 zone未区分对象类型以及特定zalloc/zcache行为的特点。
Spice越狱中的早期利用 (iOS 11)
Lightspeed bug曾作为1day在iOS 11的Spice越狱中被利用。在app sandbox和racoon环境中利用方式有所不同。目标都是mach port forgery。app利用曾尝试使用kernel stack infoleak和sandbox escape到backboardd,但未完成A10/A11支持。racoon利用则使用了sysctls(如vm.swapfileprefix)来获取已知内核地址的受控数据,以及CVE-2018-4413 infoleak来获取kernel slide。
unc0ver中tachy0n的利用 (iOS 13)
tachy0n针对A8到A13设备。利用技术更加复杂,围绕kalloc.16中OSData对象的UaF进行。通过race condition和OSUnserializeXML via IOSurface::setValue获得重叠的OSData对象。利用这些对象可以泄露mach port的内核地址。为了获取已知内核地址的受控数据,利用了IOMemoryDescriptor的子类IOBufferMemoryDescriptor。通过IOAcceleratorFamily2 (AGX interface) 的IOAccelContext2::connectClient()和IOAccelContext2::processSidebandBuffer方法,可以在特定内核地址分配并固定(fault in)可控内存页,用于伪造task和port对象。利用中还提到了绕过zone_require的方法,即使用zone_map外部的页。
后续影响与iOS安全演进
tachy0n发布后,迅速被Brandon Azad报告给Apple。Synacktiv分析了bug的回归原因。Apple在9天后发布了补丁,并添加了回归测试fd_aio_fsync_uaf.c。该漏洞及其迅速的修复凸显了当时iOS安全的状态。文章强调了iOS 14带来的重大安全变革,包括allocator(kalloc, zalloc)的重构、kheaps、对象 sequestering、随机guard pages等,以及Apple从修补bugs转向修补strategies的策略转变,如kmsg signing和pipe buffer PACing。这些变化极大地提高了exploitation的难度,并导致公开和私人安全研究之间的信息差距加大。
结论
作者回顾了过去五年的快速发展,感谢了共享0day的Pwn20wnd以及在iOS 13.0中“unpatched”该bug的人,以及所有学习和合作过的人。他认为安全领域发展速度惊人,并期待未来的发展。
- 作者:Clov614
- 链接:http://blog.rikka.net.cn/article/1fe645fc-b4a3-812a-9919-d44eaac503b6
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章








