Next.js, sharp и undici: три свежие уязвимости, которые стоит проверить в своём проекте

На днях разбирал отчёт npm audit в одном из проектов. Нашлись три уязвимости в популярных пакетах — все уже исправлены разработчиками, но если вы не обновлялись с сентября, проверьте себя.

1. Next.js — критическая (GHSA-vcvr-r3jv-pc5j)

Версии от 16.2.0 до 16.3.6. Выполнение чужого кода через ImageResponse из next/og в среде Node.js; источник — библиотека satori, которой Next.js рисует картинки.

Когда опасно: если данные пользователя попадают в содержимое, атрибуты или стили SVG при генерации картинки — например, текст из параметра адреса в OG-картинке. Edge-среда не затронута.

Что делать: обновиться до 16.3.6 или новее. Если сразу нельзя — не передавать пользовательский ввод в SVG.

2. sharp — высокая (GHSA-wq5f-xc86-pv6w)

Версии до 0.35.5. Ошибка «использование после освобождения» во встроенной librsvg — той части, что разбирает SVG.

Когда опасно: выполнение кода на Linux с glibc, если Node.js собран не как PIE — а официальные сборки Node.js собраны именно так.

Что делать: обновиться до 0.35.5. Временное решение — запретить разбор SVG: sharp.block({ operation: ["VipsForeignLoadSvg"] }).

3. undici — средняя (GHSA-rx4f-c7p8-82vq)

Версии до 7.29.1 и до 8.10.2. Процесс Node.js падает, если приложение пишет через WebSocketStream, а вредоносный сервер обрывает соединение без закрытия по протоколу.

Что делать: 7.29.1 или 8.10.2. Если фреймворк держит старую undici внутри себя — подставьте исправленную через overrides в package.json и прогоните тесты.

Главное: не обновляйте вслепую

«npm audit: critical» ещё не значит «вас можно взломать». Для каждой уязвимости стоит проверить, достижима ли она в вашем приложении: доходит ли до уязвимой функции чужой ввод, на какой платформе вы работаете. А свежие версии лучше ставить, когда им хотя бы пара недель — новые релизы ломаются чаще, чем их уязвимости эксплуатируют.

Спасибо командам Next.js, Payload и мейнтейнерам sharp и undici за быстрые исправления.