Уязвимость Ghostscript CVE-2026-39919: как один PDF может захватить сервер и кому это действительно грозит

Котёнок, наряженный маленьким привидением, под белой тканью на столе в серверной, женщина приподнимает край ткани

Большинство людей никогда не устанавливали Ghostscript и не знают, что им пользуются. Тем не менее эта программа незаметно работает на огромном числе серверов: именно она превращает загруженный PDF в миниатюру в WordPress, в системах электронного документооборота, в почтовых шлюзах и в сервисах вроде «сожмите PDF онлайн». В сентябре 2026 года в ней закрыли уязвимость, из-за которой специально подготовленный PDF может привести к выполнению чужого кода на машине, обрабатывающей файл.

Ниже — что известно наверняка, чего мы не знаем, как проверить свой сервер и что эта история значит для всех, кто отправляет документы на обработку в интернет.

Коротко

  • Уязвимость: CVE-2026-39919, переполнение буфера в куче при обработке изображений JPEG 2000 в Ghostscript. Достаточно PDF со специально подготовленным изображением.
  • Уязвимые версии: с 9.21 по 10.07.1 по данным тех, кто её нашёл (запись CVE говорит в общем «до 10.08.0»).
  • Исправление: Ghostscript 10.08.0, выпущен 8 сентября 2026 года. Дистрибутивы Linux переносят исправление в старые номера версий, поэтому значение имеет полная ревизия пакета, а не то, что выводит gs --version.
  • Опасность: 9,8 по CVSS 3.1 согласно записи CVE, 7,8 («Moderate») по оценке Red Hat. Обе цифры честные, просто описывают разные сценарии.
  • Реальные атаки: пока ни одной подтверждённой. Работающий эксплойт создан в лаборатории и подогнан под конкретную сборку.
  • -dSAFER не защищает. Ошибка срабатывает и при включённой песочнице.

Что произошло

Уязвимость обнаружила Wordfence — компания, занимающаяся безопасностью WordPress, — с помощью своей системы тестирования Argus, работающей с поддержкой ИИ. Это случилось 23 августа 2026 года во время аудита безопасности WordPress 7.1. Инструмент проследил путь загруженного файла дальше PHP-кода, который его принял: через расширение Imagick, через ImageMagick, вплоть до Ghostscript и декодера JPEG 2000 в самом низу.

Artifex, компания-разработчик Ghostscript, подтвердила сообщение на следующий день и 8 сентября выпустила версию 10.08.0 с исправлением. Запись CVE опубликована 15 сентября. Технические подробности Wordfence раскрыла 12 октября, а днём позже тему подхватили BleepingComputer и остальная отраслевая пресса.

Как устроена ошибка

Чтобы это понять, не нужно знать C. Изображение — это сетка отсчётов. JPEG 2000 позволяет компонентам изображения (например, яркости и прозрачности) иметь разное разрешение, а одному отсчёту занимать меньше 8 бит. При 2-битных отсчётах в один байт помещается четыре.

В примере, который описывают исследователи, одна строка изображения содержит 1024 таких отсчёта. В упакованном виде это 256 байт, и Ghostscript правильно резервирует 256 байт. Но когда оба названных условия выполняются одновременно, цикл, заполняющий строку, записывает целый байт на каждый отсчёт вместо того, чтобы упаковывать по четыре в байт. В 256-байтовый буфер попадает 1024 байта. Лишние 768 байт каждой строки затирают память, в которой Ghostscript хранит собственные служебные данные. А поскольку эти байты берутся из изображения, их содержимое выбирает автор файла.

Деревянные ячейки для писем в старом почтовом отделении, в каждой сидит котёнок, а в конце ряда котята вываливаются на пол

Это классический путь от «программа упала» к «программа сделала то, что хотел атакующий». Современные системы сильно затрудняют этот путь (случайное размещение в памяти и другие защиты), но полностью его не закрывают.

Как PDF попадает в Ghostscript в WordPress

WordPress сам не рисует превью PDF. Начиная с версии 4.7 он умеет создавать изображение первой страницы загруженного документа и делает это руками других программ. Цепочка выглядит так:

WordPress → PHP-расширение Imagick → ImageMagick → Ghostscript

Ghostscript запускается как отдельный процесс, обычно под той же учётной записью, что и веб-сервер. Он стартует только тогда, когда кто-то запрашивает изображение PDF. Форма, которая сохраняет файл на диск и больше ничего с ним не делает, никогда его не запустит.

Атака этим путём требует, чтобы все четыре условия выполнялись одновременно:

  1. кто-то извне (анонимно или с учётной записью с низкими правами) может загрузить PDF,
  2. сайт запрашивает превью или миниатюру этого файла,
  3. на сервере есть Imagick или другой инструмент, который для этого вызывает Ghostscript, а политика ImageMagick разрешает читать PDF,
  4. установленный Ghostscript не содержит исправления.

Важная оговорка: стандартный WordPress не позволяет анонимным посетителям загружать файлы в медиатеку. Атакующему нужен плагин, форма с полем для вложения или учётная запись, которая открывает этот путь. Wordfence проверила и официальный Docker-образ WordPress: в нём были уязвимый Ghostscript 10.05.1, расширение Imagick и работающий путь создания превью PDF. Однако сам по себе он для анонимной атаки не годился.

Одна деталь играет на руку атакующему: если первая попытка создать превью не удалась, WordPress автоматически пробует ещё раз с другими настройками. Три вредоносных вложения — это, значит, шесть запусков Ghostscript. В тесте Wordfence форма продолжала сообщать об успешной загрузке, пока Ghostscript молча падал в фоне.

Это не ошибка WordPress и не ошибка плагина форм. Они были лишь путём, по которому файл дошёл до Ghostscript.

Насколько это опасно на самом деле

Здесь стоит остановиться, потому что заголовки вроде «один PDF захватывает ваш сервер» говорят лишь половину правды.

Почему две разные оценки. Запись CVE даёт 9,8 из 10 (CVSS 3.1) и 9,3 (CVSS 4.0). Эти цифры описывают худший случай: доступное из сети приложение, которое принимает PDF без входа в систему и без участия человека. Red Hat оценивает ту же уязвимость в 7,8 и называет её «Moderate», потому что рассматривает сценарий, в котором пользователь сам открывает вредоносный файл на своём компьютере. Ни одна из оценок не ошибочна — они отвечают на разные вопросы.

Сколько попыток, сколько успехов. Wordfence создала два работающих эксплойта для своей лабораторной сборки, а затем запустила их 10 240 раз в десяти других средах: Debian, Ubuntu, Fedora, AlmaLinux, Alpine и официальном контейнере WordPress. Они не сработали ни разу. На той сборке, для которой создавались, они продолжали работать даже после смены шрифтов, языковых настроек и одной из базовых системных библиотек, хотя и не при каждой попытке.

Вывод двоякий. Не существует одного файла, который открывает любой сервер в мире. Но атакующему не нужен универсальный файл, если он целится в конкретную компанию или в хостинг, где сотни сайтов работают на одинаковом образе системы. Исследователи напоминают, что в похожем случае с библиотекой libheif другая команда с помощью ИИ подгоняла эксплойт под каждую новую цель за день-два.

С какими правами. Код атакующего выполняется под учётной записью, которая обрабатывает PDF, обычно под учётной записью веб-сервера. Это не автоматически root, но эта учётная запись обычно может читать файлы сайта, включая конфигурацию с паролем от базы данных.

Реальные атаки: на момент написания этого текста никто не сообщал об эксплуатации уязвимости за пределами лаборатории.

Как проверить свой сервер

Женщина в очках за ноутбуком, рядом с ней полосатый котёнок внимательно смотрит в экран, на столе лежит лупа

Если у вас есть доступ к командной строке, начните с трёх вопросов.

1. Есть ли здесь вообще Ghostscript и какая у пакета ревизия?

  • Debian и Ubuntu: dpkg -s ghostscript | grep Version
  • Fedora, RHEL, AlmaLinux: rpm -q ghostscript
  • Для полноты: gs --version, но этот номер сам по себе ничего не решает.

Почему номера недостаточно? Ubuntu 22.04 исправила уязвимость в пакете 9.55.0~dfsg1-0ubuntu5.14, который на вопрос о версии по-прежнему отвечает «9.55.0». В Debian 13 исправление есть в 10.05.1~dfsg-1+deb13u2 (бюллетень DSA-6516-1). Red Hat выпустила исправления для RHEL 10, 9 и 8 с 1 по 6 октября. По данным трекера Debian, Debian 12 (bookworm) всё ещё отмечен как уязвимый. Всегда сверяйтесь с бюллетенем своего дистрибутива.

Есть и ловушка в обратную сторону: релиз-кандидат 10.08.0 (RC) представляется как 10.08.0, но исправления не содержит. Именно он стоял на тестовой машине Wordfence. Если вы собирали Ghostscript из исходников, убедитесь, что это финальный выпуск.

2. Есть ли в PHP Imagick? php -m | grep -i imagick. В консоли WordPress: Инструменты → Здоровье сайта → Информация → Работа с медиафайлами. Это лишь отправная точка: здесь видно, распознаёт ли Imagick PDF, но ничего не сказано о том, исправлен ли Ghostscript.

3. Может ли ImageMagick читать PDF? convert -list format | grep -i pdf (в ImageMagick 7: magick -list format). Буквы rw рядом с PDF означают, что путь к Ghostscript открыт.

Контейнеры: перезапуска недостаточно. Скачайте обновлённый базовый образ, пересоберите без кешированных слоёв и разверните заново.

Виртуальный хостинг: обычно проверить это самостоятельно нельзя. Задайте провайдеру два вопроса: содержит ли пакет Ghostscript на его серверах исправление CVE-2026-39919 и превращаются ли где-либо в его системах загружаемые клиентами PDF в превью.

Если сразу обновиться нельзя

  • Перестаньте принимать PDF от анонимных посетителей и учётных записей с низкими правами. Файл, который не попал на сервер, не попадёт и в Ghostscript.
  • Отключите чтение PDF в политике ImageMagick. В файле policy.xml (обычно в /etc/ImageMagick-6/ или /etc/ImageMagick-7/) добавьте в раздел <policymap> строку <policy domain="coder" rights="none" pattern="{PS,PS2,PS3,EPS,PDF,XPS}" />. Побочный эффект: WordPress перестанет создавать миниатюры PDF.
  • Ограничьте число файлов в одной отправке и частоту загрузок. Это уменьшает число попыток у атакующего, но ничего не исправляет.
  • Изолируйте конвертацию документов в отдельном сервисе без доступа к секретам сайта и без лишних сетевых соединений. Это ограничивает ущерб, но тоже не является исправлением.

Чего делать не стоит: не считайте -dSAFER защитой. Песочница Ghostscript ограничивает то, что документ может делать с помощью документированных функций PostScript. От повреждения памяти она не защищает, и в тестах ошибка сработала при включённой песочнице. Никакой плагин WordPress этого не исправит, потому что Ghostscript поставляется операционной системой или образом контейнера, а не WordPress.

Не путайте эту уязвимость с CVE-2026-65640. Это другая история: удалённое выполнение кода в WordPress через загрузку файла PostScript, который тоже проходит через Imagick и Ghostscript, но требует учётной записи с правом загрузки файлов (обычно роль «Автор» или выше). Её исправили в WordPress 7.0.4, с переносом исправлений вплоть до ветки 4.7.

Это проблема не только WordPress

WordPress — лишь один из многих путей, по которым PDF незнакомца может попасть в Ghostscript. То же касается систем документооборота, серверов печати, обработки счетов, генераторов превью, почтовых шлюзов, проверяющих вложения, и API для конвертации файлов. Вопрос всегда один: отрисовывает ли эта программа PDF, пришедшие от кого-то другого?

Поиск слова «Ghostscript» в коде собственного приложения может ничего не дать. Обычно посередине стоит ImageMagick или другая библиотека, и Ghostscript вызывает уже она.

Что это значит для отправки PDF в интернет

У этой истории есть и другая сторона, о которой говорят реже. Сервис «сжать PDF», «PDF в картинку» или «объединить PDF» в браузере — это ровно тот тип сервера, о котором шла речь выше: он принимает файлы от незнакомых людей и пропускает их через инструменты, которые разбирают их и собирают заново. Вы не знаете, чем и в какой версии обрабатывается ваш документ и обновлялись ли там после 8 сентября. Зато вы знаете, что ваш файл хотя бы какое-то время лежит на той же машине, что и файлы тысяч других людей, и некоторые из них могут быть специально подготовлены.

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

Справедливости ради, локальная обработка не застрахована по определению. Если вы сами сжимаете PDF с помощью Ghostscript, обновите его до 10.08.0 или новее. Преимущество работы офлайн в другом: документ никогда не покидает ваш компьютер, а версию программы, которая его обрабатывает, выбираете вы, а не тот, кого вы никогда не видели.

Если вы регулярно объединяете, разделяете, шифруете или конвертируете PDF в Word, это можно делать, никуда их не загружая. PDF Manipulator бесплатен, работает в Windows и Linux, и каждый файл остаётся на вашем компьютере.

Источники

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх