В августе 2026 года компания Hacktron сообщила о том, что выглядит как уязвимость удаленного выполнения кода (RCE) в системе оптимизации изображений Next.js. Их расследование показало, что уязвимый код находился не в самом Next.js, а выше по цепочке зависимостей — в libheif, декодере изображений AVIF, который используется в Next.js, ImageMagick, WordPress, sharp и значительной части веб-ресурсов.
Вскоре после того, как Hacktron уведомила нас, мы совместно с ними воспроизвели RCE на текущей сборке Next.js и раскрыли информацию сопровождающим проектов sharp, libvips и libheif. Затем мы развернули платформенное решение для смягчения последствий на Vercel и начали работу с сопровождающими над исправлением.
Скопировать ссылку на заголовок: Цепочка зависимостей
Оптимизация изображений в Next.js позволяет приложениям изменять размер и оптимизировать изображения с помощью компонента <Image> (next/image). Для изображений в формате AVIF цепочка зависимостей обработки выглядит следующим образом:
- <Image> вызывает /_next/image,
<Image> вызывает /_next/image,
- /_next/image вызывает sharp
/_next/image вызывает sharp
- sharp вызывает libvips
sharp вызывает libvips
- libvips использует libheif для декодирования изображения
libvips использует libheif для декодирования изображения
Это означало, что уязвимый код находился не в Next.js, но все еще был доступен через систему оптимизации изображений Next.js. Вредоносное изображение AVIF, отправленное на конечную точку оптимизации изображений, вызывало libheif через sharp и libvips.
Таким образом, очевидным решением было отключение оптимизации AVIF в Next.js. В этом случае вредоносные изображения AVIF останавливались бы на конечной точке оптимизации, не передаваясь через sharp и libvips в libheif. Эксплойт не распространялся бы дальше по цепочке.
Однако простое исправление только в Next.js без устранения причины выше по цепочке создавало проблему с раскрытием информации.
Скопировать ссылку на заголовок: Раскрытие уязвимости и координация исправления выше по цепочке
После того как мы совместно с Hacktron успешно воспроизвели проблему, мы развернули платформенное решение на Vercel и связались с сопровождающими sharp, libvips и libheif, чтобы раскрыть уязвимость и начать работу над исправлением.
Хронология событий:
- 11-12 августа: Hacktron сообщила о проблеме в Vercel; Hacktron и Vercel воспроизвели RCE с помощью рабочего доказательства концепции (PoC).
11-12 августа: Hacktron сообщила о проблеме в Vercel; Hacktron и Vercel воспроизвели RCE с помощью рабочего доказательства концепции (PoC).
- 13 августа: Vercel применила платформенное решение через свою службу оптимизации изображений (Image Optimization Service).
13 августа: Vercel применила платформенное решение через свою службу оптимизации изображений (Image Optimization Service).
- 19 августа: Команда Next.js встретилась с сопровождающим libvips и начала координацию между проектами sharp, libvips и libheif.
19 августа: Команда Next.js встретилась с сопровождающим libvips и начала координацию между проектами sharp, libvips и libheif.
- 24 августа: Next.js проинформировала своих партнеров по безопасности.
24 августа: Next.js проинформировала своих партнеров по безопасности.
- 25 августа: Next.js опубликовала релиз безопасности, в котором была отключена оптимизация AVIF.
25 августа: Next.js опубликовала релиз безопасности, в котором была отключена оптимизация AVIF.
Команда безопасности Vercel связалась с сопровождающими sharp и libvips по электронной почте и начала координацию с libheif через GitHub Security Advisory. Hacktron также предоставила детали уязвимости и эксплойта в libheif. 19 августа команда Next.js встретилась с сопровождающим libvips и согласовала план действий для sharp, libvips и libheif. Сопровождающий libheif продолжил устранение проблемы через GitHub Security Advisory, созданный Hacktron.
24 августа Next.js проинформировала своих партнеров по безопасности об уязвимости в libheif и ее влиянии на Next.js (уведомление партнеров является стандартной частью процесса выпуска обновлений безопасности Next.js).
25 августа, через шесть дней после встречи 19 августа, сопровождающий libheif выпустил версию v1.23.2, в которой была устранена RCE.
Скопировать ссылку на заголовок: Решения Vercel и Next.js
Обеспечение безопасности Vercel и ее клиентов было простой задачей: все запросы на оптимизацию изображений в Next.js на Vercel проходят через централизованную службу оптимизации изображений. Поэтому мы отключили оптимизацию и изменение размера AVIF в этой центральной службе. Любые входящие изображения AVIF не передавались в libheif для декодирования, и RCE на Vercel стала невозможной.
Для защиты приложений, размещенных на собственных серверах, потребовался релиз Next.js. 25 августа Next.js выпустила обновление безопасности, которое изначально планировалось для решения другой проблемы. После координации исправления выше по цепочке мы включили решение для AVIF в этот релиз и выпустили его на день раньше запланированного. Релиз отключил оптимизацию и изменение размера AVIF в Next.js; учитывая, что исправленная версия libheif все еще распространялась по цепочке зависимостей, это был наиболее своевременный вариант. Мы также опубликовали бюллетень безопасности, чтобы сообщить о серьезности проблемы.
Скопировать ссылку на заголовок: Наше обязательство по повышению безопасности интернета
Количество обнаруживаемых уязвимостей в ПО с открытым исходным кодом (OSS) продолжает расти, и цифры впечатляют:
Поскольку LLM ускоряют исследование уязвимостей, мы ожидаем появления большего количества уязвимостей выше по цепочке, подобных RCE в libheif, во всей экосистеме OSS. В последние месяцы количество релизов безопасности Next.js увеличилось, и мы ожидаем, что эта тенденция сохранится, поскольку мы устраняем новые уязвимости, обнаруженные как нами, так и исследовательским сообществом.
Мы стремимся проактивно находить уязвимости раньше злоумышленников, ответственно раскрывать все найденное и сотрудничать с исследователями и сопровождающими для их исправления.
Скопировать ссылку на заголовок: Благодарности
Спасибо Hacktron за ответственное раскрытие уязвимости AVIF, совместную работу над воспроизведением проблемы и координацию с сопровождающими проектов для устранения уязвимости.
Мы также хотим поблагодарить сопровождающих sharp, libvips и libheif. Их работа над исправлением выше по цепочке сделала возможным скоординированное устранение проблемы во всей цепочке зависимостей обработки изображений.
Мы работаем с талантливыми исследователями для обеспечения безопасности Next.js и других фреймворков с открытым исходным кодом через программу Vercel Open Source Bug Bounty. Всех, кто заинтересован в содействии безопасности поддерживаемых фреймворков, приглашаем принять в ней участие.









