Критическая уязвимость в Pillow: имя файла превращается в выполнение команд
Pillow — самая распространённая библиотека работы с изображениями в Python, встречающаяся практически везде: в формах загрузки файлов, инструментах для аватаров и миниатюр, конвейерах обработки документов и PDF, а также в большинстве проектов машинного обучения. По оценке компании OX Security, чей отчёт привлёк внимание к проблеме, библиотеку загружают около 436 миллионов раз в месяц.
Опасность кроется в имени файла
Уязвимость CVE-2026-112900 связана с обработкой EPS-изображений. Чтобы превратить такой файл в пиксели, Pillow запускает отдельную программу Ghostscript и передаёт ей имя файла, предварительно его не проверяя. Ghostscript же способен воспринять выбранное злоумышленником имя не как имя файла, а как инструкцию — и указать на второй файл с командами для исполнения.
Ключевая деталь: по словам авторов рекомендаций, срабатывает именно имя, а не содержимое документа. Даже безобидный EPS-файл способен навредить, если атакующий управляет его названием. Реальной мишенью становятся точки загрузки, которые сохраняют или формируют имя файла из пользовательского ввода. Атака достигает Ghostscript только на хостах, где установлена программа gs. Затронуты версии Pillow с 2.6.0 по 12.3.0.
Сопровождающие оценивают серьёзность как умеренную, поскольку нужен контроль над именем файла. Запись CVE, присвоенная GitHub, выставляет 9,2 из 10 и помечает ту же оговорку.
Крупный выпуск с исправлениями
Версия 13.0.0, вышедшая 16 октября, устраняет сразу несколько уязвимостей разных уровней. Две из них помечены как критические. Одна — повторное использование устаревших данных изображения после смены режима. Другая охватывает переполнения при декодировании JPEG. Один из этих дефектов, в формате FlashPix, позволял выполнить команду при единственном вызове Image.open() на подготовленном файле — если установлен необязательный пакет olefile. Pillow опознаёт такие файлы по содержимому, а не по расширению, так что сервер может пострадать без действий пользователя.
Дефект CVE-2026-112403 переполняет буфер при создании миниатюры из особого JPEG; здесь сообщается о сбое, а не о выполнении кода. Его обнаружила Anthropic с помощью Claude при изучении безопасности открытого ПО, а вручную проверила Ada Logics. Ещё одна уязвимость, CVE-2026-112393, живёт в Pillow с 2013 года и переполняет буфер при сохранении сжатого TIFF в память, а не на диск.
Что делать
Нужно обновиться до Pillow 13.0.0 и пересобрать контейнеры, колёса и базовые образы со старыми копиями. Pillow 13 отказывается от Python 3.10, так что потребуется версия 3.11 или новее. До обновления рекомендуется убрать gs с хостов, обрабатывающих непроверенные загрузки, избегать draft() и thumbnail() на недоверенных JPEG и осторожно относиться к сохранению TIFF в буфер в памяти.
Источник: The Hacker News
Комментарии
Войдите, чтобы комментировать.