Новости · Безопасность файлов

Dompdf 3.1.6 закрыл три уязвимости: картинка и SVG в HTML ломали генерацию PDF

Многие сайты умеют выдавать PDF «на лету» — счёт, договор, билет, отчёт. Под капотом такую страницу в PDF часто превращает библиотека Dompdf: она берёт ваш HTML с картинками и собирает из него готовый документ. Оказалось, что через безобидную на вид картинку или SVG в этот HTML можно и уронить сервер, и подсмотреть, какие файлы на нём лежат.

Коротко: в PHP-библиотеке Dompdf, которая генерирует PDF из HTML, закрыли три уязвимости. Огромное или «шумное» изображение исчерпывает память и роняет процесс (CVE-2026-59941, CVE-2026-59942), а вредоносный SVG с ссылкой file:// позволяет узнать, есть ли на сервере тот или иной файл (CVE-2026-59943). Всё исправлено в версии 3.1.6 — обновитесь.

5 августа 2026 Редакция LoadFile Чтение 6 мин
Картинка внутри PDF-документа переполняет страницу и перегружает память
Содержание
  1. Что случилось
  2. Что такое Dompdf и почему это про файлы
  3. Как работают три уязвимости
  4. Кому и чем это грозит
  5. Что делать
  6. Частые вопросы
  7. Источники

Что случилось

В Dompdf — одной из самых популярных PHP-библиотек для генерации PDF из HTML — раскрыли сразу три уязвимости. Все они закрыты в релизе 3.1.6; уязвимы версии 3.1.5 и старше. Патч вышел в конце июля 2026 года, а подробные разборы разошлись по базам уязвимостей и профильным изданиям в начале августа. Записи заведены в CVE-каталог и в трекеры безопасности GitLab, Debian и NVD.

Объединяет все три бага одно: опасность приезжает не «извне», а внутри обычного контента страницы — картинки или векторного SVG, — который сайт послушно отдаёт библиотеке, чтобы сверстать PDF. То есть уязвим тот самый шаг, где HTML с изображениями становится файлом-документом.

Что такое Dompdf и почему это про файлы

Dompdf — это движок, который принимает HTML и CSS и на выходе отдаёт файл PDF. Его встраивают в веб-приложения, чтобы формировать документы прямо на сервере: PDF-счета и накладные, электронные билеты, справки, отчёты, сертификаты. Пользователь нажимает «Скачать PDF» — а под капотом Dompdf рендерит заранее свёрстанную HTML-страницу в документ.

Ключевой момент — что именно кладут в этот HTML. Часто туда попадают данные, которые ввёл сам пользователь: имя, адрес, комментарий, загруженная аватарка или логотип. Если приложение вставляет пользовательский ввод в шаблон без ограничений, злоумышленник может подсунуть «начинку», от которой генератор споткнётся. Формально это данные для вёрстки, а фактически — управляющий сигнал для парсера изображений.

!
Почему это про файлы

Генерация PDF — это чтение одних файлов (картинок, SVG) и запись другого (документа). Как и при обычном разборе PDF в библиотеке pypdf или спрятанном вредоносе в SVG-картинках, проблема не в самом формате, а в том, как программа обрабатывает присланное содержимое.

Как работают три уязвимости

Две из трёх дыр — это отказ в обслуживании (DoS): сервер не взламывают, а заставляют съесть всю память и упасть. Третья — утечка информации о файловой системе. Разберём по порядку.

CVEТипКак срабатывает
CVE-2026-59941DoS (память)Картинка BMP: библиотека доверяет размерам из заголовка файла и не ограничивает произведение ширины на высоту до конвертации через GD. По данным разбора, запрос всего в 169 байт может раздуть рендер примерно до 412 МБ памяти — усиление около 12 раз.
CVE-2026-59942DoS (память)Одно изображение с гигантскими размерами (например, 30 000 × 30 000 пикселей), закодированное в base64 и обёрнутое в CSS. Внутренние проверки обходятся «шумной» картинкой; при рендере выделяется около 1,2 ГБ, и процесс PHP падает по нехватке памяти (OOM).
CVE-2026-59943Утечка данныхВстроенный SVG со ссылкой file:// на локальный путь. Dompdf пытается прочитать файл: если он есть — выходит «битая» картинка, если нет — пустое место и предупреждение. По этой разнице атакующий выясняет, какие файлы и папки есть на сервере.

У двух DoS-багов общий корень — «доверься размеру из заголовка». Формат BMP или закодированная картинка сообщают о своих размерах сами, а библиотека берёт эти цифры на веру и заранее готовит под них память. Достаточно объявить огромное полотно — и одна маленькая строчка HTML превращается в гигабайты выделенной памяти. У SVG-бага корень другой: обработчик векторной графики соглашается лезть по ссылке file:// в локальную файловую систему, а наблюдаемая разница в выводе выдаёт наличие файла. Сами данные файлов при этом не утекают — раскрывается только их присутствие, что упрощает разведку перед следующей атакой.

Кому и чем это грозит

Под ударом — веб-приложения на PHP, которые генерируют PDF из HTML через Dompdf версии ниже 3.1.6 и вставляют в этот HTML данные или изображения от пользователя. Практически это формы «скачать документ», кабинеты, сервисы выставления счетов и любые публичные эндпоинты, отдающие PDF по запросу.

Последствия зависят от бага. DoS-уязвимости позволяют одним-двумя запросами исчерпать память и уронить обработчик — сервис перестаёт отвечать, а на shared-хостинге страдают и соседние сайты. Утечка через SVG сама по себе не крадёт данные, но помогает атакующему составить карту файловой системы и найти цели для дальнейших действий. Признаков массовой эксплуатации в дикой природе на момент публикации нет, но публичные разборы всегда снижают порог входа.

Что делать

  1. Обновите Dompdf до 3.1.6 или новее. В этой версии закрыты все три CVE. Через Composer: composer update dompdf/dompdf, затем проверьте установленную версию.
  2. Не подставляйте пользовательский ввод в шаблон «как есть». Экранируйте данные и по возможности не позволяйте пользователю вставлять произвольные <img> и SVG в исходный HTML документа.
  3. Запретите локальные ссылки в изображениях. Отключите загрузку по схемам file:// и фильтруйте <image> с локальными путями внутри SVG.
  4. Ограничьте ресурсы процесса. Разумный memory_limit и таймауты в PHP не устранят баг, но не дадут одному запросу утянуть за собой весь сервер.
  5. Изолируйте генерацию PDF. Настройка open_basedir и запуск рендера в отдельном ограниченном окружении уменьшают ущерб, если вредоносный контент всё-таки дойдёт до движка.
!
Общий принцип

Любой файл, который программа «разбирает» — картинку, SVG, документ, — стоит воспринимать как недоверенный ввод, а не как безобидные данные. О том, какие форматы чаще всего используют для атак, — в карте опасных расширений, а базовые правила проверки — в разделе безопасность файлов.

Частые вопросы

Я просто скачиваю PDF с сайтов — мне это грозит?

Нет. Уязвимости касаются серверной генерации PDF: под ударом сайты и приложения, которые используют Dompdf. Для обычного пользователя, который открывает готовый PDF, риска в этой истории нет.

Достаточно ли просто не разрешать загрузку картинок пользователями?

Это снижает риск, но не закрывает его: вредоносное изображение или SVG можно передать и через другие поля, которые попадают в HTML документа. Надёжная мера — обновиться до Dompdf 3.1.6, а фильтрация ввода идёт дополнительной защитой.

Опасен ли сам формат PDF или SVG?

Нет, дело не в форматах. Проблема в конкретной библиотеке и в том, как она обрабатывает размеры картинок и локальные ссылки. Те же PDF и SVG в других инструментах ведут себя нормально.

Источники

Читайте также