Новости
Уязвимости в dompdf при генерации PDF
PDF-генерация на стороне сервера тоже не застрахована от ошибок парсера: разбираем, как уязвимости в dompdf превращают входные данные в вектор атаки.
PDF — привычный формат для документов, но у него есть встроенная поддержка скриптов. Библиотека PDF.js, которая рендерит PDF прямо в браузере, содержала уязвимость CVE-2026-16633: открыв специально подготовленный файл, пользователь незаметно для себя запускал произвольный JavaScript в контексте доверенного сайта. Это угрожало кражей сессии и данных.

Коротко: 6 августа 2026 года опубликована уязвимость CVE-2026-16633 в библиотеке PDF.js с рейтингом High. При открытии вредоносного PDF-файла через PDF.js с включёнными по умолчанию настройками в браузере выполнялся произвольный JavaScript в контексте сайта. Исправление — обновление до версии 6.2.108 или выше (npm: pdfjs-dist 4.2.67+).
PDF.js — открытая JavaScript-библиотека Mozilla для рендеринга PDF-документов прямо в браузере без сторонних плагинов. Её используют Firefox (встроенный просмотрщик), тысячи веб-приложений и npm-пакет pdfjs-dist, который еженедельно скачивают миллионы разработчиков.
6 августа 2026 года в базе уязвимостей GitLab Advisory Database (GLAD) была опубликована уязвимость CVE-2026-16633 с уровнем опасности High. Проблема — в модуле поддержки PDF-скриптов: библиотека не нейтрализует активное содержимое, встроенное в PDF-файл, и при стандартных настройках выполняет произвольный JavaScript в контексте домена, который отображает документ.
Все версии PDF.js от 5.6.83 до 6.2.107 включительно. Исправлено начиная с версии 6.2.108. Для npm-пакета pdfjs-dist — версии 4.2.67 или 6.2.108 и выше.
PDF — это не просто контейнер со страницами: стандарт ISO 32000 допускает встроенные JavaScript-действия (Actions). Такие действия могут срабатывать при открытии документа, при взаимодействии с полем формы, при переходе между страницами. Это легитимная функциональность для интерактивных PDF-форм.
ОПРЕДЕЛЕНИЕ. Уязвимость CVE-2026-16633 относится к классу code injection: библиотека не проверяет содержимое скриптовых объектов в PDF и передаёт их на исполнение браузерному движку JavaScript.
Два вектора атаки:
enableScripting: true (значение по умолчанию) и сайт не выставляет строгую Content Security Policy с запретом unsafe-eval, атакующий встраивает в PDF JavaScript-действия. При открытии такого файла скрипт выполняется в контексте домена сайта-хоста.enableXfa: true через JavaScript в rich-text-полях XFA (XML Forms Architecture). Этот вектор не требует включённого enableScripting.Ключевое следствие: JavaScript выполняется в контексте домена хоста, то есть с теми же правами, что и любой другой скрипт на странице. Это позволяет похитить куки сессии, токены авторизации, считать данные из DOM или перенаправить пользователя на фишинговую страницу. При этом пользователь не замечает ничего подозрительного — он просто открывает PDF.
Похожую механику — когда безобидный с виду файл становится вектором атаки через ошибку в парсере — мы уже разбирали на примере уязвимостей в dompdf при генерации PDF. В обоих случаях опасность несёт не расширение файла, а то, как конкретная библиотека обрабатывает его содержимое.
Масштаб потенциального воздействия широкий, потому что PDF.js применяется повсеместно:
| Среда | Затронута | Примечание |
|---|---|---|
| Firefox (встроенный PDF-просмотрщик) | Да (исправлено) | PDF.js — часть движка Firefox |
| Веб-приложения с pdfjs-dist < 4.2.67 | Да | Требуется обновление зависимости |
| npm-библиотека pdf.js < 6.2.108 | Да | Всё, что использует enableScripting или enableXfa |
| ngx-extended-pdf-viewer | Да | Самостоятельный CVE — GHSA-w9hm-4m3m-fxmm |
| Chrome / Edge (Acrobat-плагин) | Нет | Используют собственный рендерер, не PDF.js |
Под особым риском — организации и разработчики, которые встроили PDF.js в порталы с документами, системы документооборота, онлайн-конвертеры или хранилища файлов. Если пользователь загружает туда PDF от третьей стороны, а сайт рендерит его через PDF.js — открывается ровно этот вектор.
Практические шаги в порядке приоритета:
4.2.67 или 6.2.108 и выше. Проверьте зависимость командой npm ls pdfjs-dist.enableScripting: false и настройте строгую CSP с запретом unsafe-eval для домена. Это закрывает вектор 1, но не полностью защищает от вектора 2 (XFA)..pdf можно сначала проверить по сигнатуре, а не открывать немедленно.Обновление PDF.js до 6.2.108+ закрывает оба вектора. Обновление Firefox решает вопрос для обычных пользователей автоматически. Разработчики, встроившие pdfjs-dist в продукт, обязаны обновить зависимость вручную. Подробнее о безопасности форматов — в разделе безопасность файлов.
Поддержка JavaScript в PDF — одна из тех функций стандарта, которые задуманы для удобства (интерактивные формы, автозаполнение), но регулярно становятся поверхностью атаки. CVE-2026-16633 — не первый случай: похожий по сценарию CVE-2024-4367 в PDF.js был раскрыт ещё в 2024 году и тоже позволял выполнять JavaScript через шрифтовые объекты в PDF.
Для пользователей loadfile.ru это означает практический вывод: PDF — не пассивный контейнер. Файл, который выглядит как обычный документ, может содержать активное содержимое, поведение которого зависит от приложения, открывающего его. Именно поэтому важно понимать, какие форматы и почему требуют особого внимания — не только исполняемые файлы.