Pillow, най-широко използваната библиотека за обработка на изображения в Python, може да бъде принудена да изпълни команди на операционната система на даден сървър чрез подаване на определено име на файл, който трябва да бъде отворен.
Уязвимостта, обозначена като CVE-2026-112900, се крие в начина, по който Pillow обработва EPS изображения. Библиотеката ги отваря, като предава името на файла към Ghostscript — отделна програма, стартирана за преобразуване на изображението в пиксели — без предварителна проверка на подаденото име.
Ghostscript може да интерпретира избраното от атакуващия име като инструкции, а не като файлов път, и да го пренасочи към втори файл, съдържащ команди за изпълнение. Разработчиците на Pillow отстраниха уязвимостта във версия 13.0.0, публикувана на 16 октомври.
Pillow намира приложение почти навсякъде, където Python обработва изображения: формуляри за качване в уеб сайтове, инструменти за аватари и умалени копия (thumbnails), пайплайни за документи и PDF файлове, като се използва и от повечето проекти за машинно обучение. Според OX Security — компанията, чийто доклад привлече вниманието към проблемите — библиотеката се изтегля приблизително 436 милиона пъти месечно.
Версия 13.0.0 представлява мащабно обновление за сигурност с корекции в четири нива на критичност — от ниско до критично, като две от тях са оценени като критични от самите поддържащи разработчици. Към момента няма данни някои от тези слабости да се експлоатират активно при атаки.
Слабостта произтича от името на файла, а не от самото изображение. „Уязвимостта се задейства от името на файла, а не от съдържанието на PostScript документа“, се посочва в бюлетина за сигурност. Това означава, че дори безобиден EPS файл може да причини щети, ако атакуващ определи неговото име. Това превръща крайните точки за качване на файлове, които запазват или конструират името на съхранявания файл от потребителски вход, в реален вектор за атака.
Слабостта засяга Ghostscript само на хостове, на които е инсталирана програмата gs, необходима на Pillow изобщо да отваря EPS файлове. Засегнати са версиите на Pillow от 2.6.0 до 12.3.0.
Поддържащите проекта определят риска като умерен, тъй като атакуващият трябва да контролира името на файла. В записа за CVE, издаден от GitHub, оценката е 9.2 от 10 при същите условия.
Две от корекциите попадат в най-високата категория „критични“ според поддържащите разработчици. Едната засяга отделен дефект при управлението на паметта, описан в бележките към изданието като повторно използване на остарели данни от изображение след промяна на режима. Другата обхваща две уязвимости с препълване на буфера при декодиране на JPEG в Pillow.
Беше демонстрирано, че един от тези JPEG дефекти, засягащ формата FlashPix (FPX), позволява изпълнение на команди на атакуващия само с едно извикване на Image.open() върху манипулиран файл, при условие че опционалният пакет olefile е инсталиран. Pillow разпознава тези файлове по тяхното съдържание, а не по разширението им, което позволява сървър, отварящ ненадеждни качени файлове, да бъде компрометиран без никакво потребителско действие.

Другата уязвимост, CVE-2026-112403, предизвиква препълване на буфера в паметта, когато програма генерира умалено изображение от манипулиран lossless JPEG. В бюлетина се съобщава само за срив на процеса, а не за изпълнение на код. Дефектът е „открит от Anthropic с помощта на Claude при изследване на сигурността на софтуер с отворен код и валидиран ръчно от Ada Logics“, се посочва в документацията — част от по-мащабна кампания на компанията, открила стотици дефекти в библиотеки с отворен код.
Трета уязвимост, CVE-2026-112393, присъства в Pillow още от 2013 г. Тя води до препълване на буфера, когато програма записва компресирано TIFF изображение в паметта, вместо във файл на диска — често срещан модел при услуги, които прекодират качен файл и го връщат обратно. В бюлетина се уточнява, че изследователите са предизвикали срив на процеса и са постигнали изпълнение на код единствено с помощта на втора, отделна уязвимост за изтичане на адреси от паметта. Записването в реален файл на диска не е засегнато.
Записите за CVE, издадени от GitHub, оценяват уязвимостите в EPS, TIFF и при генерирането на JPEG умалени копия с 9.2 от 10, което представлява критичен рейтинг. Всеки от тези случаи обаче зависи от специфични условия, които числовата оценка не отразява, а собствените оценки на разработчиците варират от умерени до критични. В регистрите за CVE анализаторите на CISA отбелязват, че няма данни за активна експлоатация на EPS уязвимостта, докато за проблема с TIFF съществува публично достъпен концептуален модел за атака (PoC).
Какво да направите
Обновете до Pillow 13.0.0, която отстранява всички тези уязвимости, и прекомпилирайте контейнерите, wheels пакетите или базовите изображения, които съдържат по-стара версия. Pillow 13 преустановява поддръжката на Python 3.10, така че инсталациите, използващи тази версия, изискват преминаване към Python 3.11 или по-нова.
pip install -U "Pillow>=13.0.0"
Докато извършите обновяването, препоръките за сигурност на Pillow предлагат следните стъпки за ограничаване на векторите за атака:
- EPS / Ghostscript: премахнете програмата
gsот всички хостове, обработващи ненадеждни качени файлове, и никога не подавайте контролирано от атакуващ име на файл къмImage.open()при EPS. - JPEG умалени копия: избягвайте
draft()иthumbnail()върху ненадеждни JPEG файлове, или първо извиквайтеload(), или подавайте параметъраreducing_gap=None. - TIFF: третирайте записването на TIFF файлове в буфер в паметта (като например
io.BytesIO) като рисков процес, когато изображението произхожда от потребителски вход.