iOS内核CVE-2026-65343 PoC发布,涉及AppleKeyStore

导语:攻击者只需要一个普通侧载App,连授权项都不用申请,就能从沙盒里把内核指针拉出来,顺手把KASLR(内核地址空间布局随机化)给废掉。苹果官方的安全公告却只说”可能导致系统意外终止”——这种轻描淡写,红队看了都替他们脸红。

漏洞封面图

一、漏洞基本面

CVE-2026-65343 由Drinor Selmanaj(哨兵安全)与Surya Narayan Kushwaha联合披露,已被苹果在iOS 26.6.1 / iPadOS 26.6.1 / macOS Tahoe 26.6.2中修复。漏洞藏身于AppleKeyStore(苹果密钥库)内核扩展的_LibSer_SEPControl_Deserialize反序列化函数中,影响iOS 26.6(23G71)及更早版本

字段内容
CVE编号CVE-2026-65343
漏洞类型Use-After-Free / Out-of-Bounds Read(释放后重用 / 越界读)
受影响产品iOS、iPadOS、macOS Tahoe 26.6及更早版本
修复版本iOS 26.6.1 / iPadOS 26.6.1 / macOS Tahoe 26.6.2
漏洞组件AppleKeyStore内核扩展 → _LibSer_SEPControl_Deserialize
攻击者要求沙盒内应用,无需任何授权项
实际危害内核指针泄露 → KASLR绕过

苹果自家公告的原话是”远程攻击者可导致系统意外终止”——这句话翻译成人话就是拒绝承认严重程度。真实情况?这个漏洞能从内核堆里读出0xfffffff0xxxxxxxx开头的内核指针,再反推出KASLR基地址,是iOS越狱链路上最关键的原语(Primitive)之一。


二、技术分析:为什么这个洞能绕过沙盒

2.1 漏洞根因

_LibSer_SEPControl_Deserialize函数会把一个(payload_ptr, declared_length)二元组从ACM(凭据管理)消息缓冲区通过copyout(内核向用户空间拷贝数据的系统调用)复制到用户态。但它压根没检查declared_length是否超出缓冲区剩余长度。攻击者只要把declared_length填成0x800(2048字节),就能多读出约0x7E8字节——这些”溢出”的字节来自相邻的内核堆分配,里面全是带前缀的内核指针。

简化的受影响代码路径大致是:

; _LibSer_SEPControl_Deserialize(受影响版本 26.6 / 23G71)
ldr w2, [acm_msg + declared_length_offset]   ; 用户可控,写成 0x800
; 没有 w2 <= (acm_msg_end - payload_ptr) 的校验 ← MISSING
bl copyout                                    ; 拷贝 w2 字节到用户态

2.2 攻击链拆解

直接对AppleKeyStore调用IOServiceOpen会被沙盒挡掉,但Security.framework里的安全隔区(Secure Enclave)密钥签名路径会在进程内触发对AppleKeyStoreIOConnectCallMethod调用,并附带一个真实的ACM会话句柄。PoC作者用了一个相当巧妙的DYLD_INTERPOSE(动态链接器拦截表)钩子来截获这个句柄:

  1. 挂载拦截钩子:通过DATA,interpose段挂载钩子。这点在iOS 26特别重要——因为__DATA_CONST(数据常量段,包含GOT全局偏移表)会在进程启动前被映射为只读,传统类似fishhook这种运行时GOT写入的钩子会直接触发KERN_PROTECTION_FAILURESIGBUS崩溃。DYLD_INTERPOSE的优势是dyld在加载镜像时就处理这张表,早于内核强制启用__DATA_CONST保护
  2. 触发签名路径:调用SecKeyCreateRandomKey(kSecAttrTokenIDSecureEnclave)创建一把P-256密钥(无需生物识别,kSecAttrAccessibleAfterFirstUnlock即可),再用SecKeyCreateSignature签一个32字节的消息——这一步会在进程内触发对AppleKeyStoreIOConnectCallMethod,拦截钩子就能把(conn, handle[16])抓出来。
  3. 重放攻击:用截获的句柄遍历163个AKS选择子(selector),每次都把declared_length设成0x800重放。
  4. 扫描内核指针:在返回缓冲区里扫0xfffffff0xxxxxxxx特征,命中即说明读到了内核指针。
  5. 计算KASLR偏移:用已知的AKS符号静态地址减去读到的地址,得到KASLR滑量(slide),等于直接把内核基地址暴露给攻击者。
攻击流程图

2.3 红队视角的硬伤

这条链路的杀伤点不在漏洞本身,而在前置条件几乎为零

  • 不需要授权项(entitlements)就能调用安全隔区路径
  • 不需要沙盒逃逸,全程在普通App沙盒内完成
  • 不需要用户交互,App上架后默默执行即可
  • DYLD_INTERPOSE对iOS 26的__DATA_CONST保护免疫,意味着传统缓解措施全部失效

KASLR被破之后,只要再拼一个内核信息泄露 + 任意写的洞,就能拼出一条完整的内核代码执行链。越狱圈把这叫”两步走”——CVE-2026-65343就是第一步。


三、PoC下载与使用

PoC已开源在GitHub,仓库地址:

https://github.com/bytev0rtex/cve-2026-65343

3.1 编译

git clone https://github.com/bytev0rtex/cve-2026-65343
cd cve-2026-65343
clang -arch arm64 
  -isysroot $(xcrun --sdk iphoneos --show-sdk-path) 
  -framework Security -framework Foundation 
  -o poc poc/poc_aks_oob.m

3.2 签名(最低授权)

codesign -s "Apple Development" --entitlements ent.plist poc

ent.plist只要求一个keychain访问组:



 keychain-access-groups
 $(AppIdentifierPrefix)com.research.poc65343

3.3 运行环境

  • iOS 26.6(23G71)或更早版本
  • 支持安全隔区的设备(A11及之后所有iPhone/iPad)
  • 任意侧载App或开发证书签名的应用均可
  • 如果签名路径走secd XPC而不是进程内IOConnectCallMethod(部分iOS构建会这样),零句柄的回退探测只能确认OOB路径可达,无法完整破KASLR

3.4 输出解读

成功运行时类似:

KPTR @+0x120 = 0xfffffff0056a3b40
KPTR @+0x148 = 0xfffffff007812c10
KASLR slide = 0x2a000000

任何被蓝屏或SIGBUS击中的兄弟,先确认固件版本——26.6.1之后这个洞就已经被堵了。


四、影响评估与防御建议

4.1 苹果在糊弄谁?

把”KASLR绕过 + 内核指针泄露”轻描淡写成”系统意外终止”,是苹果安全公告一贯的套路。从红队视角看,这种漏洞的真实威胁等级至少是高危——它本身不能直接RCE(远程代码执行),但作为越狱/持久化链路的原语,价值极高。一旦和另一个内核写原语组合,苹果的iOS安全神话就破一半了。

4.2 必须升级的目标

  • 所有未升级到iOS 26.6.1 / iPadOS 26.6.1的苹果设备
  • 所有未升级到macOS Tahoe 26.6.2的Mac
  • 越狱社区、设备取证研究人员、APT目标人物使用的设备

4.3 防御侧建议

  • MDM(移动设备管理)管理员:强制推送iOS 26.6.1更新,48小时内覆盖所有BYOD(自带设备)和公司配发设备
  • App Store审核团队:重点关注调用Security.framework安全隔区路径、且包含DATA,interpose段的应用
  • 红队/蓝队:把这个原语加入越狱链研究清单,监控是否出现公开的第二步内核写原语
  • 普通用户:第一时间升级系统,别犹豫

KASLR一破,沙盒只是摆设。这句话红队说过无数次,现在苹果自家代码又一次证明了它。

版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容