enforceEnvironment 绕过对 PCC 证明输入验证漏洞的逆向工程分析
该漏洞由 Apple 随 iOS 26.6 发布,位于 CloudAttestation.dylib 中。
PCC.ComputeNodeValidator.policy.getter 读取
com.apple.CloudAttestation.environment 字节——该字节来自 AttestationBundle protobuf 内
未经验证的 darwinInit 字典——并将其直接
塞入返回给调用方的 NodeValidator.policy。
26.6 的修复引入了一个新的结构体字段,本应在
com.apple.CloudAttestation 域中通过系统策略键
enforceEnvironment 来把关该读取——但该字段在 26.5 中
从未被初始化,因此该关卡实际上不存在;一个精心构造的
PCC 证明包便可将攻击者选定的环境值写入
验证器的策略链中。
该字节本身并不会解锁任何功能——它必须匹配
调用方提供的 expected 参数,才能通过 EnvironmentPolicy.evaluate;
其余生产策略栈(requireProdTrustAnchors、
requireProdFusing、requireLockedCryptexes、restrictDeveloperMode、
strictCertificateValidation、transparencyProofValidation、
ensembleTopologyValidation)则是从 os_policy_lookup 读取,
而非来自证明包。
IDA 数据库(.i64)、BinExport 转储以及其他中间构建版本
均已列入 gitignore。
已修复配对的 Bindiff 相似度:0.68。
CVE-2026-43813.txt — 原始 CVE 描述(逐字摘自 VulDB)releases.txt — 按时间顺序排列的构建 ID这项研究在很大程度上得到了 MiniMax-M3 的辅助。 阅读分析文章时请牢记这一点——所有分析均 未经独立验证;任何引用的反编译代码、地址或 相似度分数,在依赖之前都应重新核实。
| 构建版本 | 路径 | 用途 |
|---|
| 23G5057c | 23G5057c_CloudAttestation | 26.6 beta 4(存在漏洞) |
| 23G5065a | 23G5065a_CloudAttestation | 26.6 beta 5(已修复) |
| — | 23G5065a_CloudAttestation_vs_23G5057c_CloudAttestation.BinDiff | 两者之间的差异 |
| 符号 | 23G5057c(存在漏洞) | 23G5065a(已修复) |
|---|
PCC.ComputeNodeValidator.policy.getter | 0x235e16f5c (0x1c4) | 0x235e02fa8 (0x1dc) |
PCC.ComputeNodeValidator.init(proxyingAttestation:) | 0x235e15ca0 | 0x235e01bf4 |
Init enforceEnvironment 查找辅助函数 | (缺失) | 0x235ed01cc |
DarwinInit.environment.getter | 0x235edc880 | 相同 |