112507 reachability closed: notification registration refused (-300)
- New kern.ipc.lifecycle module: dead-name registration, dead-name send, notification receive, name reuse — single-threaded, safe on device - Device receipt (iPhone19,7, iOS 27.0.1, ad-hoc signed): request DEAD_NAME returns -300 (MIG_TYPE_ERROR); send -> MACH_SEND_INVALID_DEST; receive times out; 0/12,288 registrations armed in kern.ipc - macOS 27 sweep: 13 notification-type/right combinations, all -300 - kern.ipc now counts armed registrations and retracts the old 'survived' verdict when armed == 0; the request table is never armed - docs/KERNEL-RW-ASSESSMENT.md: 112507 marked closed for this app - app 2.2 build 5; 57 modules
This commit is contained in:
1 parent
c30aadf9bb
commit
6f4ed67c38
9 files changed
+217
-40
No files matched your search
+9
-10
@@ -413,28 +413,27 @@ enum Catalog {
|
||||
reach: .kernel,
|
||||
tier: 2,
|
||||
summaryZh: "27.2 为每个消费 per-space 端口请求表索引的函数补入 cmp/b.hi 与 NULL 陷阱(ipc_port.c:21/24/34/38/40/41)。27.0 的 free 路径计算了边界却丢弃结果,仍以未检查的基址执行读改写;mark 路径则完全没有边界计算。索引取自 space 中保存的请求表下标,故缺陷形状为「表增长或拆除」与「通知注册或消息发送」并发下的陈旧索引。",
|
||||
notesZh: "该路径上无 entitlement 门槛的入口为 mach_msg 与端口通知注册。本模块以 8 线程运行 6 秒,统计内核返回码分布 —— 任何非 KERN_SUCCESS 的出现频次变化都是索引越界的候选信号。",
|
||||
notesZh: "该路径上原本被认为无 entitlement 门槛的入口是 mach_msg 与端口通知注册。真机实测(iOS 27.0.1,iPhone 19,7)与 macOS 27 上,mach_port_request_notification 的 13 种类型/权限组合全部返回 -300(MIG_TYPE_ERROR):内核拒绝为第三方进程武装请求表项。没有请求表项,就没有可被竞态消费的陈旧索引 —— 本模块因此是一个可达性负结果,而不是竞态证据。armed 计数为 0 时,任何“survived”都不构成 112507 结论。",
|
||||
run: { ctx in
|
||||
let baseline = KernelIPC.baseline()
|
||||
ctx.arm("kern.ipc", "race 6s")
|
||||
let stats = KernelIPC.race(seconds: 6.0, workers: 4, depth: 48)
|
||||
ctx.disarm("kern.ipc", "ops=\(stats.operations)")
|
||||
ctx.disarm("kern.ipc", "ops=\(stats.operations) armed=\(stats.armed) refused=\(stats.notificationsRefused)")
|
||||
var lines = [stats.summary, ""]
|
||||
lines.append(tl("— 基线 —"))
|
||||
for (k, v) in baseline.sorted(by: { $0.key < $1.key }) {
|
||||
lines.append("\(k): \(v)")
|
||||
}
|
||||
if stats.notificationsRefused > 0 {
|
||||
if stats.armed == 0 && stats.notifications > 0 {
|
||||
lines.append("")
|
||||
lines.append(tl("— 平台限制 —"))
|
||||
lines.append(tl("对自身端口注册通知返回 -300 (KERN_INVALID_CAPABILITY)。"))
|
||||
lines.append(tl("该平台不允许这条武装路径,故请求表索引竞态无法在此被驱动。"))
|
||||
lines.append(tl("本模块仍完成了 ") + "\(stats.allocations)" + tl(" 次端口分配与回收,"))
|
||||
lines.append(tl("验证了名称空间的分配/拆除路径本身可用。"))
|
||||
lines.append(tl("— 可达性判定 —"))
|
||||
lines.append(tl("通知注册成功 0 次,拒绝 ") + "\(stats.notificationsRefused)" + tl(" 次,内核返回 -300(MIG_TYPE_ERROR)。"))
|
||||
lines.append(tl("请求表项从未建立,竞态没有可消费的对象:本模块未触达 112507。"))
|
||||
lines.append(tl("已完成的 ") + "\(stats.allocations)" + tl(" 次分配/拆除只证明端口名称空间可用,不是漏洞证据。"))
|
||||
}
|
||||
let headline: String
|
||||
if stats.notificationsRefused > 0 {
|
||||
headline = tl("分配/拆除路径可用,通知武装被平台拒绝")
|
||||
if stats.armed == 0 && stats.notifications > 0 {
|
||||
headline = tl("通知注册全程 -300 — 112507 路径未武装(负结果)")
|
||||
} else if !stats.kernelErrors.isEmpty {
|
||||
headline = tl("竞态完成,内核返回 ") + "\(stats.kernelErrors.count)" + tl(" 类错误码")
|
||||
} else {
|
||||
|
||||
Reference in new issue
Block a user