概述
此问题构成了一个现有的零日漏洞,反映了 AppleMediaServices.framework 中的系统性设计缺陷,而非回归或特定版本的错误。
Apple 的 AppleMediaServices 框架中存在一个关键的失效开放缺陷:如果远程配置文件("Bag")加载失败,请求签名会被静默禁用。这影响 iOS、macOS、tvOS 和 watchOS。
当 Bag 无法检索(由于 DNS 操纵、超时或网络干扰)时,AppleMediaServices 守护进程会禁用 Mescal/Absinthe 签名,并向 Apple 服务器发送未签名的请求。这些请求缺乏完整性保护,使用户面临降级和重放攻击的风险。
日志证据:
发现
受影响的系统
所有使用 AppleMediaServices.framework 的 Apple 平台均受影响。
受影响的守护进程包括:
漏洞概述
Apple 设备从以下端点获取动态配置 Bag:
https://bag.itunes.apple.com/bag.xml?deviceClass=...&format=json
此配置包含诸如 useAMSMescal、mescalURL 和 absintheURL 等标志,用于确定出站请求是否必须签名。
如果 Bag 加载失败,AppleMediaServices 会记录失败,禁用签名逻辑,并发送未签名的请求。没有签名验证、完整性检查或强制回退机制。Bag 未经身份验证且未签名,使得安全状态易受网络干扰。
概念验证
前提条件:
利用步骤:
使用 DNS NXDOMAIN 响应、丢弃的 TCP 握手或延迟响应来阻止或篡改对 Bag 端点的访问。
观察系统日志,显示 Bag 加载失败且 Mescal/Absinthe 签名被跳过。
触发系统组件(例如,App Store、音乐应用)发送请求。监控网络流量并确认缺少签名头部:
结果:
未签名的流量未经验证即传输到 Apple 端点。这允许操纵、重放和其他完整性风险。
威胁模型
bag.itunes.apple.com 的访问AMSBagManager 以覆盖安全标志推荐的修复措施
签名配置 使用 CMS、JWT 或 HMAC 对 Bag 进行签名,并在客户端验证签名。
安全失效默认值 当 Bag 无法检索或验证时,AppleMediaServices 应阻止依赖签名的流量。
服务器强制执行 Apple 的后端 API 应拒绝需要 Mescal 或 Absinthe 保护的未签名请求。
验证缓存 仅当 Bag 内容通过完整性检查且在规定的过期约束内时,才应进行缓存。
严重性理由
Apple 设备依赖签名请求来建立信任——从 App Store 到媒体播放。如果每当配置文件无法加载时这些签名消失,Wi-Fi 网络上的攻击者就可以剥离完整性,并在用户不知情的情况下注入或重放流量。单个丢弃的 Bag 请求意味着 Apple 的安全保证失效开放。