0x36/weightBufs
GitHub: 0x36/weightBufs
WeightBufs 是针对 Apple Neural Engine 的内核读写漏洞利用链,组合了四个 CVE 漏洞,在 iOS 15 和 macOS 12 上实现无需硬编码偏移的内核任意读写。
Stars: 303 | Forks: 25
# WeightBufs:
`WeightBufs` 是一个内核读写(r/w)漏洞利用,适用于所有支持 Neural Engine 的 Apple 设备。
Bug 和漏洞利用由 [@_simo36_](https://twitter.com/_simo36) 完成,你可以阅读我的 [POC 演示文稿](https://github.com/0x36/weightBufs/blob/main/attacking_ane_poc2022.pdf) 以了解有关漏洞和利用技术的更多细节。
该漏洞利用不依赖任何硬编码的地址或偏移量,并且在 macOS 12 到 12.4 以及 *OS 15 到 15.5 上应该可以直接(AS IS)运行。
内核漏洞影响所有 iOS 15 版本(最高至 16.0),但是 sandbox escape 已在 iOS 15.6 中被修复。因此,为了让漏洞利用链在 iOS 15.6/15.7 上再次生效,需要打破现有的利用链并采用另一种 sandbox escape。
尽管我还有另一个最高可在 iOS 16.1 上生效的 sandbox escape,但我不确定该内核漏洞利用技术是否仍然可以在 iOS 15.6+ 上使用。
# 漏洞:
该漏洞利用链结合了 4 个我独立发现并报告给 Apple 的漏洞:
* `CVE-2022-32845`:针对 model.hwx 的 aned 签名校验绕过。
* `CVE-2022-32948`:由于缺少数组索引校验导致的 DeCxt::FileIndexToWeight() OOB(越界)读取。
* `CVE-2022-42805`:由于整数溢出问题导致的 ZinComputeProgramUpdateMutables() 潜在任意读取。
* `CVE-2022-32899`:由于整数溢出问题导致的 DeCxt::RasterizeScaleBiasData() 缓冲区下溢。
# 测试设备:
* iPhone12 Pro (iPhone13,3),运行 iOS 15.5。
* iPad Pro (iPad8,10),运行 iPadOS 15.5。
* iPhone11 Pro (iPhone12,3),运行 iOS 15.4.1。
* MacBookAir10,1 M1,运行 macOS 12.4。
# 注意事项:
在某些情况下,漏洞利用可能会失败:
- 目标 *IOSurface* 或 *IOSurfaceClient* 对象的地址高于可变内核缓冲区 `MUTK`,但是该漏洞利用会及早检测到失败,从而防止设备崩溃。只需再次运行该漏洞利用,通常在第二次尝试时就会成功。
- 如果该漏洞利用在第 2 阶段或第 3 阶段频繁导致设备崩溃,这意味着必须针对测试设备对其进行调整,请务必阅读 `DEBUG_EXPLOIT_STAGE_2_KERN_PANIC` 和 `DEBUG_EXPLOIT_STAGE_3_KERN_PANIC` 以获取更多详细信息。
- 目标设备需要处于空闲状态,最好在使用该漏洞利用之前重新启动设备,如果开启飞行模式效果会更好。
# 鸣谢
WeightBufs 包含了由 Elias Limneos 通过 classdump-dyld 1.0 生成的 AppleNeuralEngine framework 头文件。
# 许可证
WeightBufs 在 MIT 许可证下发布。
标签:Apple Neural Engine, iOS, UML, Web报告查看器, 内核漏洞利用, 提权, 越狱