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

PDF.js CVE-2026-16633: вредоносный PDF выполнял JavaScript прямо в браузере

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

9 августа 2026 Редакция LoadFile Чтение 5 мин
PDF-иконка с потоком 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 запускает скрипты в браузере

PDF — это не просто контейнер со страницами: стандарт ISO 32000 допускает встроенные JavaScript-действия (Actions). Такие действия могут срабатывать при открытии документа, при взаимодействии с полем формы, при переходе между страницами. Это легитимная функциональность для интерактивных PDF-форм.

ОПРЕДЕЛЕНИЕ. Уязвимость CVE-2026-16633 относится к классу code injection: библиотека не проверяет содержимое скриптовых объектов в PDF и передаёт их на исполнение браузерному движку JavaScript.

Два вектора атаки:

  • Вектор 1 — enableScripting. Если параметр enableScripting: true (значение по умолчанию) и сайт не выставляет строгую Content Security Policy с запретом unsafe-eval, атакующий встраивает в PDF JavaScript-действия. При открытии такого файла скрипт выполняется в контексте домена сайта-хоста.
  • Вектор 2 — XFA-формы. Срабатывает при 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 — открывается ровно этот вектор.

Что делать пользователям и разработчикам

Практические шаги в порядке приоритета:

  1. Обновите Firefox. Mozilla обновила встроенный PDF.js в одном из плановых выпусков браузера. Убедитесь, что Firefox актуален — и этот вектор закрыт.
  2. Обновите pdfjs-dist. Если вы разработчик и используете npm-пакет, поднимите версию до 4.2.67 или 6.2.108 и выше. Проверьте зависимость командой npm ls pdfjs-dist.
  3. Проверьте ngx-extended-pdf-viewer. Этот Angular-компонент бандлит PDF.js; убедитесь, что он обновлён — по уязвимости выпущен отдельный бюллетень GHSA-w9hm-4m3m-fxmm.
  4. Временное смягчение без обновления. Если обновление прямо сейчас невозможно: в конфиге PDF.js выставьте enableScripting: false и настройте строгую CSP с запретом unsafe-eval для домена. Это закрывает вектор 1, но не полностью защищает от вектора 2 (XFA).
  5. Не открывайте PDF из непроверенных источников через браузерный просмотрщик. До обновления — особенно осторожно с файлами от незнакомых отправителей. Загруженный .pdf можно сначала проверить по сигнатуре, а не открывать немедленно.
Главное

Обновление PDF.js до 6.2.108+ закрывает оба вектора. Обновление Firefox решает вопрос для обычных пользователей автоматически. Разработчики, встроившие pdfjs-dist в продукт, обязаны обновить зависимость вручную. Подробнее о безопасности форматов — в разделе безопасность файлов.

Почему PDF-скрипты остаются риском

Поддержка JavaScript в PDF — одна из тех функций стандарта, которые задуманы для удобства (интерактивные формы, автозаполнение), но регулярно становятся поверхностью атаки. CVE-2026-16633 — не первый случай: похожий по сценарию CVE-2024-4367 в PDF.js был раскрыт ещё в 2024 году и тоже позволял выполнять JavaScript через шрифтовые объекты в PDF.

Для пользователей loadfile.ru это означает практический вывод: PDF — не пассивный контейнер. Файл, который выглядит как обычный документ, может содержать активное содержимое, поведение которого зависит от приложения, открывающего его. Именно поэтому важно понимать, какие форматы и почему требуют особого внимания — не только исполняемые файлы.

Источники

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