目标:运行 iOS 26.5.2 的 iPhone 13(A15)。此应用会反复冲击 AGXG14P GPU 的命令队列路径,这些路径很可能通向每个队列的计数位掩码(count >= 0x400 → 越界写入 0x40 字节槽位 → 内核堆损坏)。
0xfffffff008003a8c(26.5.2):x1 = 32 位计数掩码。
对于每个置位的位 n,它会将一个 0x40 字节的固定模板
(00 00 00 00 + FF×60)复制到 obj+0x1040+n*0x40 和 obj+0x1540+n*0x40。
26.6 修复:拒绝 count >= 0x400(即任何位 ≥ 10)。合法槽位为 0..9。[cmd+0x14] 字段
(包装函数 0xfffffff00800c9d0)按 OR 累加。批次槽位数组
(10 个槽位 × 0x40)位于对象偏移 0x1040 / 0x1540 处。count 无法通过任何静态调用/字面量到达——该函数是通过
运行时构建的分派表(间接 PAC 调用)到达的。[cmd+0x14](或该掩码)。这正是
本探针试图通过经验方法发现的内容。在一个提交的批次中,某条命令的 0x14 字段(或整个批次的 OR 结果)
设置了位 ≥ 10。因此,本探针会用高位值冲击所有可能的外表面:
共享事件信号值 1<<k(k=0..31)、密集掩码(0x3FF|0x400..0xFFFFFFFF)、
256 缓冲区的单一批次、围栏、渲染 + 计算 + 拷贝、32 个队列。
如果探针触发了该漏洞,预期症状按严重程度递增排列如下:
现成的 ipa 由 GitHub Actions 在每次推送时自动构建,并投放到最新一次
运行的 build artifacts 中(AGXProbe.ipa)。它是未签名的,
因此请使用任意免费 Apple ID 侧载工具安装:
当前 ipa:bundle id com.agxprobe.test,arm64,MinOS 17.0。
如果侧载工具拒绝该 bundle id,请使用唯一 id 重新签名。
AGXProbe.xcodeproj。PRODUCT_BUNDLE_IDENTIFIER(例如 com.you.agxprobe1)改为
任意唯一值,以便签名成功。eventStorm → inFlight → fenceStorm → multiQueue → computeHeavy → chainedEvents → mixed → (repeat)。agxprobe.log,位于应用的 Documents 中,因为
UIFileSharingEnabled 已开启,可通过“文件”应用访问)并发回。如果系统崩溃:
设置 → 隐私与安全性 → 分析与改进 → 分析数据 → 找到最新的
panic-full-<date>(如果应用被杀则是 JetsamEvent / ipa-log-<timestamp>)→
共享 / AirDrop / 复制其末尾部分。
"panic(cpu ...)" 之后的前几行会显示崩溃的内核函数——请将这些行发回。