
Исследовательские заметки, документирующие CVE-2024-30350 — чтение за границами буфера в обработке аннотаций Foxit PDF Reader, включая триаж, раскрытие и рекомендации по защите.
CVE-2024-30350 — это уязвимость раскрытия информации через чтение за границами буфера в Foxit PDF Reader. Проблема была опубликована Trend Micro Zero Day Initiative как ZDI-24-333 и до раскрытия отслеживалась под идентификатором ZDI-CAN-22708.
В публичном бюллетене уязвимая область описывается как обработка объектов Annotation в Foxit PDF Reader. Специально сформированный PDF-файл может заставить приложение читать данные за пределами выделенного буфера. Для эксплуатации требуется взаимодействие с пользователем, например открытие вредоносного PDF-файла или посещение страницы, которая доставляет такой файл. Непосредственное воздействие — раскрытие конфиденциальной информации, и в бюллетене отмечается, что это состояние может быть полезно при объединении с другими уязвимостями.
Этот репозиторий документирует уязвимость, процесс исследования, процедуру триажа и заметки о раскрытии. Он намеренно не содержит готового к применению proof of concept.
| Поле | Значение |
|---|
| CVE | CVE-2024-30350 |
| Бюллетень ZDI | ZDI-24-333 |
| Дело ZDI | ZDI-CAN-22708 |
| Продукт | Foxit PDF Reader |
| Вендор | Foxit |
| Компонент | Обработка объектов Annotation |
| Слабость | Чтение за границами буфера |
| CWE | CWE-125 |
| Воздействие | Раскрытие информации |
| CVSS | 3.3 |
| Вектор | CVSS:3.0/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N |
| Дата отчёта вендору | 2023-12-20 |
| Дата публичного бюллетеня | 2024-03-28 |
| Дата обновления бюллетеня | 2024-07-01 |
| Исправлено в | Обновлениях безопасности Foxit PDF Reader 2024.1 и Foxit PDF Editor 2024.1 |
Согласно бюллетеню безопасности Foxit от 5 марта 2024 года, к затронутым версиям для Windows относились Foxit PDF Reader 2023.3.0.23028 и более ранние, а также несколько линеек выпусков Foxit PDF Editor вплоть до версий, перечисленных в бюллетене.
Аннотации PDF представлены в виде словарей, прикреплённых к страницам через массив /Annots страницы. Программе чтения необходимо разобрать словарь аннотации, разрешить прямые и косвенные значения, нормализовать данные геометрии и внешнего вида, а затем связать результат с путями отрисовки, выделения, редактирования, JavaScript и доступности.
Класс ошибки для CVE-2024-30350 — сбой проверки границ в этом конвейере разбора аннотаций. Некорректно сформированный объект аннотации мог заставить Foxit PDF Reader доверять производной длине или форме объекта, которые больше не соответствовали базовому буферу. На уязвимом пути программа могла читать за пределами выделенной границы объекта. Наблюдаемый режим отказа — нарушение доступа при обработке аннотации; при ином расположении памяти тот же примитив мог раскрыть соседнюю память процесса.
Проблема не была сетевой уязвимостью в одно нажатие. Атакующему нужно было убедить целевого пользователя открыть специально сформированный документ или перейти на страницу доставки, которая приводила к открытию документа. Это отражено в требовании взаимодействия с пользователем в CVSS.
Исходное исследование началось как целенаправленный аудит сложных семейств объектов PDF, а не как общий фаззинг формата файлов. Обработка аннотаций была выбрана потому, что аннотации находятся на плотном пересечении логики парсера, поведения UI, доступа через JavaScript и инкрементальных обновлений документа.
Ранний корпус сочетал обычные документы с синтетическими страницами, содержащими аннотационные словари с высокой вариативностью. Генератор варьировал длины массивов, косвенность объектов, null-значения, неожиданные примитивные типы, рекурсивные ссылки и комбинации потоков внешнего вида. Наиболее полезные образцы не были полностью случайными. Они были достаточно грамматически осведомлёнными, чтобы достичь кода нормализации аннотаций, но всё ещё достаточно некорректными, чтобы проверить предположения в нативном парсере.
Первым сигналом стало падение, которое воспроизводилось только когда страница содержала определённую некорректно сформированную структуру аннотации и аннотация принудительно проходила через путь интерактивной обработки. Открытия документа было достаточно для разбора страницы, но надёжное воспроизведение улучшалось при обновлении вида, масштабировании страницы или при касании дерева аннотаций кодом выделения или отрисовки.
Отладка сузила проблему до чтения за концом выделения в куче во время обработки объекта аннотации. Падение не походило на разыменование null. Сбойная инструкция потребляла память, смежную с буфером, связанным с аннотацией, а соотношения размеров в минимизированном образце указывали на несоответствие между разобранным логическим счётчиком и реальным доступным хранилищем для этого объекта.
Образец был минимизирован путём повторного удаления несвязанных объектов PDF, ресурсов страницы, шрифтов, метаданных и потоков, пока не остались только дерево страниц, целевая страница и структура аннотации. Уменьшенный файл сохранил ту же сигнатуру падения, что сделало его пригодным для скоординированного раскрытия.
После триажа находка была отправлена через Zero Day Initiative. Дата отчёта вендору в публичном бюллетене — 2023-12-20. Скоординированный бюллетень был опубликован 2024-03-28, и Foxit устранил проблему в линейке обновлений 2024.1.
Непосредственное воздействие — раскрытие памяти из процесса Foxit PDF Reader. Само по себе это обычно означает ограниченное воздействие на конфиденциальность. Однако в более полной цепочке эксплуатации чтение за границами буфера может быть ценным для утечки содержимого кучи, указателей на объекты, структуры выделения памяти или другого состояния процесса, необходимого для надёжной эксплуатации отдельной уязвимости повреждения памяти.
Это объясняет низкую автономную оценку CVSS, при этом проблема всё ещё остаётся значимой для укрепления цепочек эксплуатации.
Пользователям следует обновить Foxit PDF Reader и Foxit PDF Editor до исправленных версий. Организациям, обрабатывающим недоверенные PDF-файлы, также следует держать включёнными Protected View, Safe Reading Mode, элементы управления репутацией файлов, фильтрацию вложений и средства защиты конечных точек от эксплойтов.
Для разработчиков парсеров главный урок состоит в том, что аннотационные словари следует рассматривать как недоверенный структурированный ввод, даже когда окружающий PDF синтаксически корректен. Производные длины, нормализованные массивы, разрешённые косвенные объекты и кэшированные представления объектов должны проверяться на каждой границе между кодом парсера, отрисовщика, скриптов и UI.
| Путь | Назначение |
|---|---|
README.md | Основной обзор уязвимости |
docs/discovery-process.md | Сквозное повествование об исследовании |
docs/advisory-notes.md | Факты и ссылки из публичного бюллетеня |
docs/triage-checklist.md | Общий чек-лист, использованный для триажа падений PDF-ридеров |