一行代码如何可能损坏你的 iPhone | Rambo 代码

这是关于目前发现的最喜欢的 iOS 漏洞之一的故事。

  • Darwin 通知:大多数 iOS 和 Mac 开发者熟悉[NSNotificationCenter]和[NSDistributedNotificationCenter],而 Darwin 通知更简单,是 CoreOS 层的一部分,提供进程间简单消息交换的机制,每个通知有一个关联的stateUInt64),通常用于表示布尔值truefalse
  • 漏洞:苹果操作系统(包括 iOS)上的任何进程都可以在沙盒内注册接收任何 Darwin 通知,无需特殊权限,且发送通知也无需特殊权限,API 是公开的且无验证发送者的机制,由此引发了对利用其进行拒绝服务攻击的思考。
  • 概念验证:EvilNotify:通过寻找使用notify_register_dispatchnotify_check的进程,创建了测试应用“EvilNotify”,能实现多种影响整个系统的操作,如在状态栏显示“液体检测”图标等。
  • “恢复中”:找到最有希望的拒绝服务攻击方式是触发“恢复中”模式,只需一行代码notify_post("com.apple.MobileSync.BackupAgent.RestoreStarted"),SpringBoard 会观察此通知触发 UI,而此操作因设备未实际恢复会超时失败,需点击“重启”按钮重启设备。
  • 拒绝服务:VeryEvilNotify:为使 Darwin 通知成为拒绝服务,通过创建包含小部件扩展的“VeryEvilNotify”应用,在扩展的入口点调用notify_post,并让扩展在运行后立即崩溃,从而使设备进入“恢复中”状态,需设备擦除和从备份恢复。
  • 时间线:2024 年 6 月 26 日向苹果发送初始报告,9 月 27 日收到苹果通知称正在缓解,2025 年 1 月 28 日问题标记为已解决并确认赏金资格,3 月 11 日分配 CVE-2025-24091 并在 iOS/iPadOS 18.3 中解决,漏洞赏金为 17500 美元,苹果已分配 CVE 但相关咨询尚未发布。
  • 缓解措施:发送敏感 Darwin 通知现在需要发送进程拥有受限权限,如com.apple.private.darwin-notification.restrict-post.<notification>,通知名称带有com.apple.private.restrict-post.前缀会被notifyd验证权限,从 iOS 18.2 beta 2 开始引入此机制,多个相关进程开始采用新的受限通知权限,到 iOS 18.3 解决了所有演示的问题。
阅读 10
0 条评论