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

Библиотека обработки картинок libvips: битые TIFF и GIF могут «уронить» сервер

libvips — быстрый движок обработки изображений, на котором держится популярная Node.js-библиотека sharp: через неё делают превью и меняют формат загруженных картинок десятки тысяч сайтов. В середине июля 2026 года в libvips исправили сразу четыре уязвимости в коде, разбирающем файлы GIF, TIFF и VIPS. Проблема острее обычного: уязвимую версию sharp по сей день поставляет фреймворк Next.js — и соответствующий тикет в его репозитории всё ещё открыт.

3 августа 2026 Редакция LoadFile Чтение 6 мин
Иконка файла-изображения рассыпается в цветные пиксельные квадраты рядом с неоновым щитом безопасности над сеткой миниатюр

Коротко: в движке обработки изображений libvips исправлены четыре уязвимости (CVE-2026-33327, CVE-2026-33328, CVE-2026-35590, CVE-2026-35591) в загрузчиках GIF, TIFF и VIPS. Через libvips работает Node.js-библиотека sharp — версии до 0.35.0 уязвимы; в них специально сформированная картинка может обрушить процесс или обратиться к чужой памяти. Опаснее всего то, что уязвимую sharp всё ещё тянет за собой Next.js. Мера — обновить sharp до 0.35.x (сейчас 0.35.3, libvips 8.18.3).

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

libvips — это библиотека с открытым кодом для быстрой обработки изображений: она открывает, конвертирует и масштабирует десятки форматов, экономно расходуя память. Напрямую её почти никто не запускает — чаще всего libvips работает «под капотом» у других инструментов. Самый заметный из них — sharp, стандарт де-факто для обработки картинок в мире Node.js: именно sharp генерирует миниатюры и переводит форматы в бесчисленных веб-приложениях.

17 июля 2026 года в базе GitHub Advisory появился бюллетень GHSA-f88m-g3jw-g9cj, который свёл воедино четыре уязвимости, найденные и уже исправленные в libvips. По данным авторов, все они затрагивают sharp как зависимость, потому что libvips встроен в него статически. Пакет sharp закрыл проблему в версии 0.35.0 (вышла 10 июня 2026), а текущая рекомендованная версия — 0.35.3 (1 июля 2026) с обновлённым libvips 8.18.3.

В чём суть уязвимостей

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

ЗагрузчикФормат и суть
TIFF (VipsForeignLoadTiff)Ключевая из четырёх — CVE-2026-35591: в версиях libvips до 8.18.1 загрузчик неверно определял число цветовых каналов в JPEG- или JPEG2000-плитке внутри TIFF; буфер выделялся под одно число каналов, а данные писались под другое — это запись за границей кучи. Оценка — CVSS 7.0 («высокая»), исправлено в libvips 8.18.2
GIF (VipsForeignLoadNsgif)Ошибка безопасности памяти при разборе кадров анимированного GIF
VIPS (VipsForeignLoadVips)Проблема в разборе собственного формата библиотеки .vips, включая переполнение при вычислении размеров

Практический итог у всех один: на входе — небольшой «битый» файл GIF, TIFF или .vips, на выходе — аварийное завершение процесса (отказ в обслуживании) или обращение к памяти за пределами буфера, что в худшем случае ведёт к утечке данных или выполнению кода. По оценке исследователей, наибольшему риску подвержены серверные Node.js-сервисы, которые автоматически обрабатывают чужие загруженные изображения.

Почему это касается Next.js

Отдельная причина, по которой история важна прямо сейчас, — цепочка зависимостей. sharp попадает в проекты не только напрямую: его тянут за собой веб-фреймворки, и крупнейший из них — Next.js, где sharp отвечает за оптимизацию изображений. 22 июля 2026 года в репозитории Next.js завели тикет #96064: релиз next@16.2.11 подтягивает sharp 0.34.5 — то есть уязвимую версию из этого же бюллетеня. На момент публикации заметки тикет остаётся открытым.

!
Почему это важно, даже если вы не программист

sharp и libvips обычно стоят «невидимо» — на стороне сайта или сервиса, куда вы загружаете фото. Если такой сервис можно вывести из строя одним специально сформированным изображением, страдает не только он: под угрозой и другие пользователи, чьи файлы обрабатывает тот же сервер. Обновление библиотеки закрывает эту точку входа.

Что делать

Надёжная мера одна — привести версии в порядок. Порядок действий зависит от того, как именно вы соприкасаетесь с sharp и libvips:

  1. Если вы разработчик и sharp есть в проекте — обновите пакет до 0.35.x (например, npm install sharp@latest) и переразверните сервис.
  2. Если sharp приходит транзитивно (через Next.js или другой фреймворк) — до официального обновления зафиксируйте безопасную версию через механизм переопределений пакетного менеджера: overrides в npm, resolutions в Yarn или overrides/pnpm.overrides в pnpm — указав sharp ≥ 0.35.0.
  3. Отдельно проверьте системный libvips, если приложение линкуется с ним динамически: нужна версия 8.18.2 или новее (в 8.18.3 подтянуты дополнительные исправления).
  4. Как временную меру бюллетень предлагает запретить декодирование форматов GIF, TIFF и VIPS в sharp, если сервис их не использует.
  5. Как обычный пользователь онлайн-сервисов — не загружайте на сторонние площадки конфиденциальные файлы и выбирайте проверенные ресурсы. О безопасной работе с загрузками мы рассказываем в разделе безопасность файлов.

Что это значит для работы с файлами

Случай с libvips — очередное напоминание: сама по себе обработка изображения может быть опасной, даже если его всего лишь уменьшают или переводят в другой формат, а не открывают вручную. Это уже не первая подобная история за месяц: незадолго до этого патчи от отказа в обслуживании выпускали для библиотеки Pillow, движка ImageMagick и низкоуровневой libtiff. Закономерность одна: чем богаче формат и чем больше кода в его разборщике, тем выше шанс наткнуться на ошибку при обработке намеренно «битых» данных.

Практический вывод простой: держите в актуальном состоянии инструменты, через которые проходят чужие файлы, и не считайте картинку заведомо безобидной. Если хотите глубже разобраться в форматах изображений, помогут наши разборы — например, чем открыть WebP, — а выбрать безопасный способ поменять формат помогут онлайн-конвертеры файлов.

Источники

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