22 октября Next.js выпустил исправления для двух критических уязвимостей, через которые можно удалённо выполнить код на сервере. Днём раньше вышел релиз безопасности Node.js. Свои проекты я уже обновил, ниже коротко, кого это касается.
Next.js
• RCE через оптимизатор картинок (next/image). Дыра в библиотеке sharp, бьёт по серверам на Linux с glibc, то есть почти по любому Docker-образу на Debian или Ubuntu.
• RCE в функциях use cache, касается тех, кто включил Cache Components.
• DoS через Server Actions: один запрос нагружает процессор и вешает сервер.
Куда обновляться:
→ Next 16: до 16.4.1 и выше, сейчас актуальна 16.4.3
→ Next 15: до 15.5.28 и выше
→ Next 14 и старше: исправленных версий нет. Как минимум принудительно поставьте sharp 0.35.5 через overrides, а лучше переезжайте на актуальную ветку.
Node.js
Главная дыра в декодере Brotli, тоже с удалённым выполнением кода. Под ударом всё, что ходит через fetch(), а это почти любой бэкенд.
→ 22.23.4 / 24.22.1 / 26.12.1
→ Node 20 и старше исправлений не получит.
Отдельно
Если в проекте есть sharp сам по себе, без Next (ресайз картинок на Express или в воркерах), его тоже поднимите до 0.35.5.
Если думаете, что у вас "мелкий" проект и это не коснётся, то ошибаетесь. В прошлом году я словил майнера на полузабытом проекте. А буквально 10 минут назад (см скрин) - кто-то автоматически пытается пербирать сайты на Next.js в поисках уязвимости. Пришло по 3м сразу проектам отбивка
Что пришло - Запрос на страницу входа в админку с телом, которое прикидывается формой, но собрано неправильно. Next.js не смог его разобрать и отбросил. Настоящая страница входа так не отправляет, обычный человек получить эту ошибку не может. Но это ещё СТАРАЯ уязвимость, прошлого года.
Никто не "охотится" за вашими проектами, все идёт автоматом.
Начнём с того, что ты, сука, коллекционер папок. У тебя в ~/.claude/projects их около семидесяти. Не проектов, а именно папок, потому что половина из них дубли, форки и форки форков. Develop и Development лежат рядом, как два брата-долбоёба, которые не знают друг о друге. А GLINKIN-FINAL и GLINKIN_FINAL вообще отличаются дефисом и подчёркиванием. Чувак, если у тебя в названии папки слово FINAL и таких папок две, то это нихуя не финал, это ебучий сериал. И ещё папка 123123. Ну охуенно, назвал, как пароль от вайфая у бабушки.
Дальше. Ты Next.js-разработчик, который боится Питона, но при этом сам ведёт в проде FastAPI-бэк с оплатами на двух стендах и трёх платёжках. Это как бояться воды и работать спасателем на пляже. И, сука, 24 сентября NameError в вебхуке Prodamus положил ВСЕ оплаты подписок. Одна опечатка, и бабки перестали заходить. Ты не разработчик, ты, блядь, экстремал.
Pet-Tests. EasyAvatar, EasyMoney, EasyReels, EasyVibe, EasyEnsur. Всё у тебя, сука, easy, а по факту в памяти лежат project-crimson-dead, snapstart-winddown и easymoney-market-verdict. Знаешь, какой там вердикт рынка, я даже открывать не буду, и так всё понятно. EasyMoney оказался нихуя не easy и нихуя не money. В MySaas память вообще пустая: SaaS настолько твой, что о нём даже сказать нечего. А в TransportTycoon лежит заметка user-no-gamedev. То есть ты полез делать тайкун, официально нихуя не понимая в геймдеве. Уважаю, но пиздец.
Личный бренд. У тебя есть канал «Брюханцев. Кухня технаря», и под него ты завёл шесть агентов: Growth Стратег, Instagram Куратор, YouTube Стратег, Бренд-гардиан, Контент-мейкер и ещё Ассистент. Шесть ебучих сотрудников на один личный бренд. У тебя отдел маркетинга больше, чем у половины компаний в Томске. А в памяти EasyReels лежит posting-paused-until-shareable. То есть армия есть, полсотни правил про рилсы есть, а постинг на паузе. Генеральный штаб, у которого война отменена.
Твой CLAUDE.md. Капсом, с тремя знаками ⛔️, «НАРУШЕНИЕ ЭТОГО ПРАВИЛА = КРИТИЧЕСКАЯ ОШИБКА. ПЕРЕЧИТАЙ ЭТО ПЕРЕД КАЖДЫМ git add». Это писал человек, которого явно хоть раз жёстко наебал автопуш. Ты так орёшь на меня в конфиге, будто я у тебя в подъезде лампочку спиздил. Причём сам при этом таскаешь по проектам feedback_no_push_without_command, feedback_no_auto_push и feedback_git_push_permission. Одно и то же правило в трёх местах, как три замка на двери в хрущёвке.
Инфраструктура. У тебя VPS-ки по всему миру, Hysteria2, прокси для Телеги, прокси для OpenAI, обход ТСПУ, отдельный сервер, который блокирует Телеграм. Ты не разработчик, ты, блядь, подпольный провайдер. Роскомнадзор, наверное, на тебя отдельную папку завёл, и она у них тоже называется FINAL. И вишенка: в памяти лежит valentin-disk-almost-full. Ну естественно, сука, у тебя же семьдесят папок и каждая FINAL.
А ещё есть mac-dock-hang-trap. Твой Мак настолько охуел от тебя, что у него Dock виснет. Даже железо намекает, что пора закрыть пару вкладок в жизни.
Ну и под конец. Начал ты со слов «брат, ты же всё про меня знаешь», а сам сидишь в папке Desktop. На рабочем столе, сука. Как мамка, которая хранит все файлы на рабочем столе, только у тебя там целая Кремниевая долина на минималках.
Но если серьёзно: ты в одно рыло держишь прод с реальными деньгами, кучу клиентов, два стенда, три платёжки, мини-аппы, ботов и VPN-сеть. Хаос охуенный, но он работает и приносит бабки. Так что ты не долбоёб, ты долбоёб-предприниматель, а это уже уважаемая категория.