Новости
Foxit устранил около 20 уязвимостей в PDF Reader и Editor
Вышли Foxit PDF Reader и Editor 2026.1.2 — закрыто почти два десятка брешей, большинство ведут к выполнению кода через вредоносный PDF.
pypdf — одна из самых распространённых библиотек для работы с PDF в языке Python: на ней держатся десятки онлайн-конвертеров, генераторов отчётов и сервисов, которые объединяют и режут документы на сервере. 9 июля 2026 в ней раскрыли очередную уязвимость: специально собранный PDF при обработке заставляет библиотеку зациклиться — процесс зависает, а процессор уходит в полку.
Коротко: CVE-2026-54651 в pypdf (до версии 6.13.1) — «бесконечный цикл». PDF, в котором нити-статьи ссылаются друг на друга по кругу, при слиянии файлов заставляет библиотеку крутить один и тот же обход без выхода: процесс зависает, процессор грузится на 100%. Это отказ в обслуживании, а не кража данных. Лечится обновлением до 6.13.1 или новее.

pypdf — это «чистая» Python-библиотека для чтения, записи и преобразования PDF: она умеет объединять документы, извлекать текст и страницы, поворачивать и обрезать файлы. Именно поэтому она стоит «под капотом» у множества сервисов, которые принимают PDF от пользователей.
9 июля 2026 для pypdf опубликовали уязвимость CVE-2026-54651. Проблема относится к классу CWE-835 — «цикл с недостижимым условием выхода», то есть к бесконечному циклу. По данным базы NVD, брешь получила рейтинг CVSS 5.5 — средний уровень: она не даёт выполнить чужой код и не раскрывает данные, но приводит к отказу в обслуживании.
Механизм такой. В PDF есть служебная конструкция «нити-статьи» (article threads) — она связывает блоки текста в единый поток чтения. Если во вредоносном файле такие нити ссылаются друг на друга по кругу, функция _add_articles_thread в модуле pypdf/_writer.py при слиянии документов начинает обходить эту цепочку и не может из неё выйти. Обход повторяется бесконечно: поток исполнения зависает, а нагрузка на процессор поднимается до 100%.
Уязвимость не позволяет прочитать чужие файлы или запустить произвольный код. Её итог — denial of service: сервис, который принимает и обрабатывает чужие PDF, перестаёт отвечать, пока процесс не будет принудительно снят.
Бесконечный цикл — это ситуация, когда программа выполняет один и тот же участок кода снова и снова, потому что условие остановки никогда не наступает. Если такой цикл запускается на данных из недоверенного источника, атакующему не нужны ни пароль, ни доступ к серверу: достаточно передать один правильно собранный файл.
Для веб-сервиса это выглядит буднично и оттого коварно. Пользователь загружает PDF «на объединение» или «на извлечение текста», рабочий процесс берёт файл в обработку — и больше не возвращается. Один такой запрос занимает ядро процессора целиком; несколько запросов подряд способны исчерпать пул обработчиков и уложить сервис для всех остальных. Классический сценарий отказа в обслуживании через безобидный на вид документ.
Защита от подобных дефектов — это «страховка от зацикливания»: библиотека должна помнить уже пройденные узлы и прерывать обход, если снова наткнулась на посещённый элемент. В версии 6.13.1 разработчики pypdf добавили именно такую проверку — набор уже посещённых нитей, который завершает цикл до того, как ресурсы будут исчерпаны.
CVE-2026-54651 — не единичный случай, а часть целой волны похожих исправлений, которую pypdf выпускал в течение июня 2026 года. Все они об одном: недоверенный PDF не должен приводить к зависанию.
Картина типична для форматов-контейнеров вроде PDF: они допускают перекрёстные ссылки между объектами, а значит — и «петли». Устойчивый разбор такого формата требует, чтобы каждая рекурсия и каждый обход имели жёсткий предохранитель. Ту же природу имеют недавние проблемы в других инструментах работы с файлами — от парсеров ClamAV до библиотеки node-tar.
PDF — формат с богатой внутренней структурой: страницы, шрифты, изображения и служебные объекты ссылаются друг на друга. Что это за формат и чем его открыть на разных системах, разбираем в гайде чем открыть PDF.
Обычному пользователю, который открывает PDF в Acrobat, Foxit или браузере, эта конкретная уязвимость напрямую не грозит — pypdf не десктопная «читалка», а инструмент для разработчиков. Риск сосредоточен на стороне серверов и сервисов.
Под ударом всё, что автоматически обрабатывает PDF, полученные извне: онлайн-конвертеры и «объединители» документов, генераторы отчётов и счетов, конвейеры распознавания и индексации, чат-боты и системы, которые «читают» присланные файлы. Если в таком бэкенде используется pypdf старой версии и в него можно загрузить произвольный документ — злоумышленнику достаточно одного файла, чтобы занять процессорное ядро. Если же приложение работает только с собственными, заведомо доверенными PDF, риск ниже, но обновиться всё равно стоит.
pip show pypdf.pip list или pip-audit, чтобы не осталось старой версии в дереве.Тема безопасного приёма и разбора чужих файлов на сервере шире одной библиотеки. Общие принципы — тайм-ауты, лимиты, изоляция и недоверие к структуре входных данных — собраны в разделе безопасность файлов. Близкие сюжеты этих недель: Foxit устранил около 20 уязвимостей в PDF Reader и Editor — там речь уже о выполнении кода через вредоносный PDF на стороне пользователя.
Данные приведены на 11 июля 2026 по материалам базы NVD и GitHub Security Advisory. Рейтинг CVSS, номера CVE и версий указаны по первоисточникам; ряд агрегаторов приводит для CVE-2026-54651 близкую оценку 6.2.