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 за быстрые исправления.