August 25, 2025
20 浏览量
Welcome

iOS 18.6.1 DNG漏洞深度分析 (CVE-2025-43300)

深入分析Apple ImageIO框架中的零日漏洞,详解DNG文件格式、JPEG无损解压缩机制以及两字节修改如何触发越界写入。涵盖漏洞原理、内存机制、攻击载荷构造和防护措施的完整技术分析。

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字段

text
1原始值: 01 (1个组件/像素)
2修改值: 02 (2个组件/像素)

这个修改告诉TIFF解析器每个像素包含2个颜色组件,系统据此分配相应大小的处理缓冲区。

第二处修改 (0x3E40B):SOF3组件计数

text
1原始值: 02 (2个组件)
2修改值: 01 (1个组件)

这个修改告诉JPEG解码器实际只需要处理1个颜色组件的数据。

元数据不匹配机制

这两个修改创造了一个致命的元数据不匹配:

  1. 缓冲区分配阶段: 系统根据SamplePerPixel=2分配处理2个组件的内存空间
  2. 数据处理阶段: JPEG解码器根据SOF3组件计数=1,认为只有1个组件需要处理
  3. 越界访问: 当系统尝试访问第二个组件的数据时,发生越界写入

代码路径差异

并非所有DNG文件都会触发此漏洞,需要满足特定条件:

  • 使用JPEG无损压缩 (SOF3标记)
  • 包含特定的SubIFD结构
  • 经过特定的相机或工具生成

使用Adobe DNG Converter或dnglab等标准工具生成的DNG文件通常不会达到易受攻击的代码路径。

内存机制深度分析

堆内存分配策略

ImageIO框架在处理DNG文件时采用动态内存分配:

  1. 元数据解析: 读取TIFF标签,确定图像参数
  2. 缓冲区分配: 根据SamplePerPixel计算所需内存大小
  3. JPEG解码: 初始化解码器,分配组件缓冲区
  4. 数据写入: 逐个处理颜色组件数据

边界检查缺失

关键问题在于缓冲区边界检查的缺失:

c
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构造步骤

基于研究者提供的方法:

  1. 获取基础DNG文件:

    下载地址: https://www.dpreview.com/sample-galleries/4949897610/pentax-k-3-mark-iii-sample-gallery/2771457523
  2. 精确字节修改:

    bash
    1# 修改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
  3. 触发漏洞:

    • 通过AirDrop发送到iOS设备
    • 在照片应用中打开
    • 或通过其他图像处理应用加载

攻击向量特点

隐蔽性高: 修改后的文件在多数查看器中仍可正常显示
传播容易: 可通过各种渠道传播(社交媒体、邮件等)
检测困难: 需要深度文件格式分析才能发现异常
影响广泛: 影响所有未修补的iOS和macOS设备

防护措施与修复分析

Apple官方修复

Apple在受影响系统中实施了"改进的边界检查":

  • 加强了TIFF标签与JPEG标记的交叉验证
  • 在组件缓冲区访问前增加边界检查
  • 改进了内存分配和释放的安全性

通用防护策略

对于开发者:

  1. 输入验证: 严格验证文件格式的所有字段
  2. 边界检查: 在所有缓冲区访问前进行边界验证
  3. 交叉验证: 验证不同数据源之间的一致性
  4. 安全分配: 使用安全的内存分配和访问模式

对于用户:

  1. 及时更新: 立即安装安全更新
  2. 谨慎处理: 避免打开来源不明的图像文件
  3. 隔离环境: 在安全环境中处理可疑文件

检测和防御

系统管理员可以考虑:

  • 部署文件格式验证工具
  • 监控异常的内存访问模式
  • 实施应用程序沙箱限制
  • 使用静态分析工具检查类似漏洞

免责声明: 本分析仅用于安全研究和防护目的。请勿将相关技术用于恶意攻击或非法活动。

喜欢这篇文章吗?

分享给你的朋友和同事吧!

Welcome
Last updated: August 25, 2025
相关文章
正在检查服务状态...
iOS 18.6.1 DNG漏洞深度分析 (CVE-2025-43300) - ICTRUN