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开发, 内存破坏, 内核堆溢出, 内核扩展, 子域名枚举, 拒绝服务, 整数下溢, 暴力破解, 沙箱逃逸, 漏洞复现, 系统安全