针对 CVE-2026-65343 的 PoC,这是一个 iOS 26.6 上的 AppleKeyStore 内核越界读取漏洞,可通过 DYLD_INTERPOSE ACM 句柄捕获,从沙盒应用泄露内核指针以绕过 KASLR。
组件: AppleKeyStore 内核扩展 — _LibSer_SEPControl_Deserialize
受影响: iOS / iPadOS 26.6 (23G71) 及更早版本
修复于: iOS / iPadOS 26.6.1 (23G83)
类型: SEP 控制消息反序列化中的越界读取
影响: 内核指针泄露 → 从沙盒内、无权限的进程实现 KASLR 绕过(通过 DYLD_INTERPOSE 捕获 ACM 句柄)
发现者:Drinor Selmanaj(Sentry)、Surya Narayan Kushwaha
(依据 Apple 安全公告 — iOS 26.6.1)
AppleKeyStore 内核扩展中的 _LibSer_SEPControl_Deserialize 通过 copyout() 将一个来自 ACM(凭据管理器)消息缓冲区的 (payload_ptr, declared_length) 对发布到用户空间,而未验证 declared_length ≤ remaining。
通过提供 declared_length = 0x800,驱动程序会复制约 0x7E8 字节,超出内核 ACM 消息缓冲区末尾——读取到相邻的内核堆分配中。这些相邻区域包含内核指针(0xfffffff0xxxxxxxx),可用于计算 KASLR 偏移。
; _LibSer_SEPControl_Deserialize (受影响路径, 26.6 / 23G71)
ldr w2, [acm_msg + declared_length_offset] ; 用户可控的 0x800
; 无检查: w2 <= (acm_msg_end - payload_ptr) ← 缺失
bl copyout ; 将 w2 字节复制到用户空间
直接调用 IOServiceOpen("AppleKeyStore") 会被沙盒阻止,无法用于侧载应用。然而,Security.framework 的安全隔区密钥签名路径会在进程内使用真实的 ACM 会话句柄调用 IOConnectCallMethod。
PoC 使用 __DATA,__interpose 钩子(该钩子在 dyld 加载时运行,早于 __DATA_CONST 被设为只读——在 iOS 26 上,fishhook 因 DATA_CONST 保护而被阻止):
SecKeyCreateRandomKey(kSecAttrTokenIDSecureEnclave) → SecKeyCreateSignature() → 进程内 IOConnectCallMethod 以真实 ACM 句柄触发(conn, handle[16])declared_length = 0x800 在 163 个 AKS 选择器上重放0xfffffff0xxxxxxxx 内核指针 → 计算 KASLR 偏移poc_aks_oob.m 实现了完整的 ACM 句柄捕获和越界探测链:
kSecAttrAccessibleAfterFirstUnlock,无生物识别)declared_length = 0x800 在所有 163 个 AKS 选择器上重放KPTR @+XXXX = 0xfffffff0YYYYYYYY 处发现的任何内核指针如果 SE 密钥签名通过 secd XPC 而非进程内路由,则回退探测使用零句柄(确认越界路径可达;所有选择器将无法通过 ACM 验证,但 VNOP 路径已确认)。
在 iOS 26 上,__DATA_CONST(包含 GOT)在任何进程内代码运行之前就被映射为只读。运行时 GOT 写入(如 fishhook 所用)会触发 KERN_PROTECTION_FAILURE → SIGBUS。通过 __DATA,__interpose 的 DYLD_INTERPOSE 之所以有效,是因为 dyld 在镜像加载时处理 interpose 表,早于内核强制执行 __DATA_CONST 保护。
kSecAttrTokenIDSecureEnclave)——任何侧载应用无需权限即可使用# Xcode 项目 — 链接 Security.framework 和 Foundation.framework
clang -arch arm64 \
-isysroot $(xcrun --sdk iphoneos --show-sdk-path) \
-framework Security -framework Foundation \
-o poc poc/poc_aks_oob.m
codesign -s "Apple Development" --entitlements ent.plist poc
最低权限(ent.plist):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
<key>keychain-access-groups</key>
<array><string>$(AppIdentifierPrefix)com.research.poc65343</string></array>
</dict></plist>
| 日期 | 事件 |
|---|---|
| 2026-08-17 | iOS 26.6.1 发布并修复 |
| 2026-08-17 | Apple 在安全公告中发布致谢 |