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报告查看器, 内核漏洞利用, 提权, 越狱