大数跨境
0
0

一行价值1.75万美元的代码,让 iPhone 秒变砖

一行价值1.75万美元的代码,让 iPhone 秒变砖 代码卫士
2025-04-28
1
导读:该漏洞已修复

  聚焦源代码安全,网罗国内外最新资讯!

编译:代码卫士

研究人员发现,可利用iOS 系统中的 Darwin 通知机制执行拒绝服务攻击。该漏洞易于利用,而该攻击还利用了目前苹果多个操作系统仍在依赖的、但很多开发人员可能从未听说过的遗留公开API。


Darwin 通知


Darwin 通知是 CoreOS 层的一个组成部分,为苹果操作系统上进程间的简单消息交换提供了底层机制。与Darwin 通知机制相关联的并非对象或字符串,而是 state(通常是 Uint64),且一般仅通过布尔值(true 或 false)进行表示。

该API的一个简单用例是只希望将某既定事件通知给其它进程,那么可以调用notify_post函数,而接收该通知的进程可通过 notify_register_dispatch 函数进行登记,当其它进程以特定名称发布该通知时,在特定队列上就会调用一个代码块。希望发布Darwin 通知的具有状态显示的进程需要首先注册一个句柄,而这可通过调用 notify_register_check 函数完成。希望获得通知状态的进程则可通过notify_register_check机制调用notify_get_state获得当前状态。如此,Darwin通知即可用于某些事件类型,同时持有系统上任何进程在任何既定时间进行查询的状态。

苹果操作系统上的任何进程,包括iOS 在内均可注册成从沙箱,需要任何Darwin通知,且无需任何特别权限。

Darwin 通知的属性如下:

  • 无需特权即可接受通知

  • 无需特权即可发送通知

  • 以公开API的形式可用

  • 无验证发送人的机制

那iOS上是否存在一些使用Darwin通知的地方执行强大操作,从沙箱应用中执行拒绝服务攻击?


概念验证


从早期的 iOS 18 beta 版中找到iOS root 文件系统并获取能够使用 notify_register_dispatch 和 notify_check 的进程后,研究员开发了一款测试应用,名为 “EvilNotify”。

研究员测试后发现,即使用户强制退出该app,这起拒绝服务攻击仍然能影响整个系统,具体而言,攻击能够:

  • 导致“液体检测”特性的图标显示在状态栏中。

  • 触发“显示端口”连接状态在“灵动岛 (Dynamic Island)”中显示.

  • 拦截系统范围内拉下“控制中心”、“通知中心”和“锁屏”的手势。

  • 强制系统无法使用无线网络,仅能使用蜂窝网络。

  • 锁定系统。

  • 触发“数据正在传输中”的UI,只有用户取消才能使用该设备。

  • 使设备进入并使“找到我的”进入“丢失状态”,触发Apple ID 密码对话提示,重新启用“苹果支付”。

  • 触发设备进入“正在恢复”模式。


“正在恢复”模式


上述提到的最后一个场景“正在恢复”似乎是最有可能实现的,只需点击“重启”按钮,就会导致设备重启。而且实现起来非常简洁,毕竟只有如下一行代码:

notify_post("com.apple.MobileSync.BackupAgent.RestoreStarted")


这一行代码就足以使设备进入“正在恢复”状态。由于设备实际并非恢复状态,因此时限之后该操作必然失败,而唯一的修复方法就是点击“重启”按钮,重启设备。

当设备通过一台联网计算机从一份本地备份恢复时,就会触发通知,进而触发UI。如之前所述,任何进程都可发送该通知并诱骗系统进入该模式。


拒绝服务


Darwin 通知可能变成拒绝服务,而作者所需做的就是在设备重启时不断触发它。研究员设法验证了即使app不在前台时notify_post也可运行,设备多次重启也能够重复发布通知。

之后研究员创建名为“VeryEvilNotify”的小组件,当iOS 检测到它时就会将其唤醒并迫切执行,随后会在多个地方如锁屏、主页屏幕、通知中心和控制中心进行展示。研究员之后将上述提到的一行代码加入小组件扩展,并通过在TimelineProvider 的每个扩展点方法中调用 Swift 的 fatalError() 函数,设法让系统执行了创建的 VeryEvilNotify app,避免了因扩展请求太频繁而被系统限时并延迟更新的机制。之后,屏幕显示了“正在恢复”的UI,之后失败并给出重启系统的提示。重启之后,当 SpringBoard 初始化后,该扩展都会被系统唤起,设备要求擦除并从备份重启。

研究员后续并未验证该app是否会终于备份,设备从中恢复,该漏洞被再次出发,使其作为拒绝服务攻击更有效。研究人员猜测当小组件扩展崩溃时,iOS应该会有一些重新尝试的机制,不过也有可能因为重启开始之后失败导致该机制失效。

该漏洞编号为CVE-2025-24091,作者因此获得1.75万美元的赏金。该漏洞已在 iOS 18.3中修复。



代码卫士试用地址:https://codesafe.qianxin.com
开源卫士试用地址:https://oss.qianxin.com










推荐阅读

iPhone Triangulation 攻击滥用未记录的苹果硬件特性

苹果开放iPhone 14 Pro 申请,助力2024安全研究

以色列监控公司 QuaDream 利用零点击 exploit 攻击高风险 iPhone

苹果紧急修复两个已遭利用的 0day,影响 iPhone 和 Mac设备

苹果修复今年以来影响iPhone 和 Mac设备的第8枚0day




原文链接
https://rambo.codes/posts/2025-04-24-how-a-single-line-of-code-could-brick-your-iphone

题图:Pixabay License


本文由奇安信编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。




奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的产品线。

    觉得不错,就点个 “在看” 或 "” 吧~

【声明】内容源于网络
0
0
代码卫士
奇安信代码卫士是国内第一家专注于软件开发安全的产品线,产品涵盖代码安全缺陷检测、软件编码合规检测、开源组件溯源检测三大方向,分别解决软件开发过程中的安全缺陷和漏洞问题、编码合规性问题、开源组件安全管控问题。本订阅号提供国内外热点安全资讯。
内容 3434
粉丝 0
代码卫士 奇安信代码卫士是国内第一家专注于软件开发安全的产品线,产品涵盖代码安全缺陷检测、软件编码合规检测、开源组件溯源检测三大方向,分别解决软件开发过程中的安全缺陷和漏洞问题、编码合规性问题、开源组件安全管控问题。本订阅号提供国内外热点安全资讯。
总阅读766
粉丝0
内容3.4k