crazymind90/CVE_2025_24257----NOT-MINE

GitHub: crazymind90/CVE_2025_24257----NOT-MINE

首个公开的 Apple IOGPUFamily 内核整数下溢漏洞 PoC,可通过简单的 IOKit 调用触发内核堆越界读写并导致系统崩溃。

Stars: 3 | Forks: 0

# CVE-2025-24257 **IOGPUFamily bitmap_mask 下溢 — 内核堆 OOB 写入** 首个公开 PoC。原始发现者:Cyberserval 的 [Wang Yu]。 ## 漏洞详情 IOGPUFamily 内核扩展 (`com.apple.IOGPU`) 在 `newResourceGroup()` 中存在整数下溢: ``` bitmap_mask = (capacity >> 6) - 1; ``` 当 `capacity < 64` 时,右移操作产生 `0`,无符号减法下溢为 `0xFFFFFFFF`。这意味着位图 —— 虽然只分配了 8 字节 —— 被视为 32GB 大小。 在连接关闭时,析构函数遍历 `bitmap[0..bitmap_mask]`,读取远超分配范围的未映射内核内存,导致崩溃。 同样的下溢也允许在资源插入期间进行 **OOB 写入**:`bitmap[hash/64] |= bit` 和 `group_info[hash] |= bit` 在攻击者控制的偏移量处向相邻的内核堆对象写入单个比特位。 ## 影响 - **类型**: 内核堆 OOB 读/写 - **触发**: 3 次 IOKit 调用 (打开, 创建资源, 关闭) - **Entitlements**: 无需 - **沙盒**: 可从应用沙盒访问 - **结果**: 内核崩溃。存在 OOB 写入原语,但未演示利用。 ## 受影响版本 | 版本 | 状态 | |---------|--------| | iOS 18.3 (22D60) | 存在漏洞 | | iOS 18.4+ | 已修复 | | macOS (带 Apple GPU) | 可能存在漏洞 (未测试) | ## 如何使用 1. 将 `CVE_2025_24257.m` 添加到针对 **真机** (非模拟器) 的 Xcode 项目中 2. 链接 `IOKit.framework` 3. 在您的应用中调用 `trigger_CVE_2025_24257()` 4. 设备将在毫秒级内发生内核崩溃 ``` // Example: call from viewDidLoad or a button action extern void trigger_CVE_2025_24257(void); trigger_CVE_2025_24257(); ``` ## 技术细节 | 字段 | 值 | |-------|-------| | 服务 | `IOGPU` | | 用户客户端类型 | 1 | | 选择器 | 9 (`s_new_resource`) | | structIn 大小 | 128 字节 | | structIn[0] | 3 (资源组) | | structIn[56] | 1 (容量) | | bitmap_mask | `0xFFFFFFFF` (从 `(1>>6)-1` 下溢) | | 位图分配 | `kalloc.type.var*.16` 中的 8 字节 | | 崩溃 PC | `sub_FFFFFFF009863C7C` (位图迭代器) | ## 崩溃日志特征 ``` panic: kernel data abort FAR: 0xffffffe0XXXXXXXX (unmapped, past zone page) PC: 0xFFFFFFF009863C7C (IOGPUFamily bitmap iterator) x27: 1 (capacity of vulnerable group) ``` ## 根本原因 (伪代码) ``` void newResourceGroup(uint32_t capacity) { // BUG: no check for capacity < 64 uint32_t bitmap_mask = (capacity >> 6) - 1; // 0xFFFFFFFF when capacity < 64 uint64_t *bitmap = kalloc(sizeof(uint64_t)); // 8 bytes // bitmap_mask says 4 billion qwords exist // Later, destructor does: for (uint32_t i = 0; i <= bitmap_mask; i++) { // iterates 4 billion times if (bitmap[i]) { /* process entries */ } // OOB read → panic } } ``` ## 修复 Apple 在 iOS 18.4 中修复了此问题,增加了最小容量检查,确保在计算 `bitmap_mask` 之前 `capacity >= 64`。 ## 致谢 - **漏洞发现**: Cyberserval 的 Wang Yu - **PoC 开发**: CrazyMind90 (使用 Claude Code) ## 免责声明 此 PoC 仅用于 **防御性安全研究和教育**。该漏洞已完全修补。请勿对非您所有的设备使用。作者不对滥用行为负责。 ## 许可证 MIT
标签:0day, Apple安全, CVE-2025-24257, CVE监控, GPU驱动, IOGPUFamily, IOKit, iOS漏洞, Kernel Panic, macOS漏洞, Objective-C, OOB写入, PoC, T1505, Web报告查看器, Xcode开发, 内存破坏, 内核堆溢出, 内核扩展, 子域名枚举, 拒绝服务, 整数下溢, 暴力破解, 沙箱逃逸, 漏洞复现, 系统安全