CVE-2025-43300: Обработка DNG-изображений в iOS/macOS приводит к повреждению памяти
Обзор
CVE-2025-43300 — это критическая уязвимость повреждения памяти в фреймворке обработки изображений Apple, затрагивающая iOS 18.6.1 и системы macOS. Уязвимость существует в коде декомпрессии JPEG Lossless внутри RawCamera.bundle и активируется несоответствиями между метаданными TIFF и параметрами JPEG-потока в файлах DNG.
Детали уязвимости
Основная причина
Уязвимость возникает из-за несоответствия метаданных и потока в файлах DNG (Digital Negative):
- Метаданные SamplesPerPixel в заголовках TIFF указывают ожидаемое количество цветовых компонентов.
- Количество компонентов SOF3 в потоках JPEG Lossless задаёт фактические компоненты данных.
- Когда эти значения различаются, выделение памяти и обработка становятся несогласованными.
Поток повреждения памяти
1. Парсер считывает SamplesPerPixel из метаданных TIFF (например, 2 компонента)
2. Система выделяет буфер: ширина × высота × 2 компонента
3. Декодер JPEG считывает количество компонентов SOF3 (например, 1 компонент)
4. Декодер записывает данные, основываясь на несогласованных предположениях
5. Происходит переполнение буфера, когда записывается больше данных, чем было выделено
Вектор атаки
- Уязвимость без клика: не требует взаимодействия с пользователем.
- Автоматическая обработка: активируется при просмотре, импорте или получении DNG-файлов.
- Кроссплатформенное воздействие: затрагивает как iOS, так и macOS.
- Повреждение памяти: может привести к сбоям приложений или потенциальному выполнению кода.
Обзор инструментов
Этот репозиторий содержит два инструмента на Python для анализа и воспроизведения CVE-2025-43300:
1. Анализатор уязвимости DNG (dng_vulnerability_analyzer.py)
Назначение: Анализирует структуру DNG-файла для выявления условий уязвимости.
Ключевые возможности:
- Разбирает структуру TIFF/DNG, включая IFD и SubIFD.
- Находит теги метаданных SamplesPerPixel.
- Определяет маркеры SOF3 JPEG Lossless и количество компонентов.
- Обнаруживает несоответствия метаданных и потока.
- Сообщает точные смещения в байтах для модификации.
Использование:
python3 dng_vulnerability_analyzer.py <dng_file>
Вывод:
- Анализ структуры файла.
- Расположение и значения тегов метаданных.
- Информация о компонентах JPEG-потока.
- Оценка уязвимости.
- Конкретные смещения для создания POC.
2. Безопасный модификатор hex (hex_modifier.py)
Назначение: Создаёт proof-of-concept файлы путём безопасного изменения определённых байтов.
Ключевые возможности:
- Проверяет ожидаемые значения байтов перед изменением.
- Создаёт хеши SHA256 для отслеживания файлов.
- Генерирует отчёты о бинарных различиях.
- Реализует проверки безопасности для предотвращения случайного повреждения.
- Поддерживает как ручное, так и автоматическое создание POC.
Использование:
# Создание POC с использованием известных уязвимых смещений
python3 hex_modifier.py create-poc <input.dng>
# Ручное изменение байтов
python3 hex_modifier.py modify <input.dng> <offset> <old_byte> <new_byte> <output.dng>
# Генерация отчёта о различиях
python3 hex_modifier.py diff <original.dng> <modified.dng>
Процесс создания POC
Шаг 1: Анализ целевого файла
python3 dng_vulnerability_analyzer.py IMGP0847.DNG
Это выявит:
- Расположение метаданных SamplesPerPixel.
- Расположение количества компонентов SOF3 JPEG.
- Текущие значения и предлагаемые изменения.
Шаг 2: Создание уязвимого образца
Для POC требуются две конкретные модификации байтов:
- Увеличение метаданных SamplesPerPixel (обычно с 1 до 2).
- Уменьшение количества компонентов SOF3 (обычно с 2 до 1).
python3 hex_modifier.py create-poc IMGP0847.DNG
Шаг 3: Проверка POC
python3 dng_vulnerability_analyzer.py vuln_poc_IMGP0847.dng
Подтверждает наличие несоответствия и активацию уязвимости.
Почему POC работает
Технический механизм
-
Фаза выделения:
- Парсер изображения считывает SamplesPerPixel = 2.
- Выделяет буфер для пиксельных данных на 2 компонента.
- Размер буфера = ширина_изображения × высота_изображения × 2.
-
Фаза обработки:
- Декодер JPEG Lossless встречает SOF3 с 1 компонентом.
- Логика парсинга путается в реальном и ожидаемом размере данных.
- Пытается записать данные на основе несогласованных предположений.
-
Повреждение памяти:
- В буфер записывается больше данных, чем было выделено.
- Переполнение буфера повреждает соседние области памяти.
- Приводит к сбою приложения или потенциальному выполнению кода.
Особенности формата файла
Файлы DNG используют контейнерный формат TIFF со встроенными потоками JPEG Lossless:
- Метаданные TIFF описывают свойства изображения и цветовую информацию.
- JPEG-потоки содержат сжатые пиксельные данные.
- Доверительные отношения существуют между метаданными и содержимым потока.
- Пробел в проверке позволяет несоответствующим значениям достигать кода обработки.
Оценка воздействия
Серьёзность: Критическая
- Оценка CVSS: Высокая (без клика, повреждение памяти, широкое воздействие).
- Затронутые системы: iOS 18.6.1, системы macOS с аналогичной обработкой изображений.
- Вектор атаки: Передача файлов по сети / локально.
- Взаимодействие с пользователем: не требуется.
- Охват: Все устройства, обрабатывающие DNG-файлы.
Реальные сценарии
- Вложения электронной почты с DNG-файлами.
- Передача через AirDrop.
- Синхронизация облачных фотографий.
- Загрузка образцов фотографов из Интернета.
- Обмен медиафайлами в мессенджерах.
Смягчение и исправления
Реакция вендора
- Исправлено в iOS 18.6.2: Apple реализовала правильную проверку метаданных.
- Обновления macOS: Аналогичные исправления применены к обработке изображений в macOS.
- Основная причина: Добавлены проверки согласованности между метаданными и параметрами потока.
Рекомендуемые меры смягчения
- Обновите системы: Установите iOS 18.6.2 или новее.
- Проверка входных данных: Проверяйте согласованность метаданных в пользовательских парсерах.
- Проверка границ: Внедрите строгую проверку размера буфера.
- Фаззинг: Регулярное тестирование парсеров файловых форматов.
Структура файла и технические детали
Структура TIFF/DNG
TIFF Header → IFD Chain → SubIFDs → Image Data
├── Теги метаданных (SamplesPerPixel, Compression и т.д.)
├── Потоки JPEG Lossless (маркеры SOF3)
└── Пиксельные данные (сжатые)
Ключевые расположения уязвимости
- Тег SamplesPerPixel: Тег TIFF 0x0115 в структурах IFD.
- Маркеры SOF3: Начало кадра JPEG Lossless (0xFFC3).
- Количество компонентов: Смещение в байтах +9 от маркера SOF3.
- Критическое несоответствие: когда значение тега ≠ количество компонентов.
Рекомендации по тестированию
Безопасная среда тестирования
- Используйте изолированные системы: Виртуальные машины или выделенные тестовые устройства.
- Создавайте снимки: Перед тестированием POC-файлов.
- Отслеживайте сбои: Проверяйте системные журналы и отчёты о сбоях.
- Сетевая изоляция: Предотвратите непреднамеренный обмен файлами.
Ожидаемое поведение
- Уязвимые системы: Сбой приложения, ошибки повреждения памяти.
- Системы с исправлениями: Корректная обработка ошибок или правильная обработка.
- Индикаторы в журналах: Нарушения доступа к памяти, ошибки сегментации.
Технические ссылки
Документация по формату файлов
- Спецификация TIFF 6.0: Структура тегов и формат IFD.
- Спецификация DNG: Формат Adobe Digital Negative.
- Стандарт JPEG: Сжатие без потерь (ITU-T T.87).
Исследования безопасности
- Методы повреждения памяти: Основы переполнения буфера.
- Фаззинг файловых форматов: Автоматическое обнаружение уязвимостей.
- Безопасность парсеров: Рекомендации по проверке ввода.
Отказ от ответственности: Данное исследование предоставляется только в образовательных целях и для защиты. Пользователи несут ответственность за соблюдение применимых законов и этических норм.
ПРИМЕЧАНИЕ
Для активации падения требуется около 1–3 минут. Удачи.
А для POC вы можете выполнить open vuln_file.dng, чтобы запустить файл, или просто открыть его для предпросмотра, и оно будет выполнено.