W ciągu jednego tygodnia października 2026 roku wyszły pilne poprawki dla Node.js i Next.js. W obu znaleziono podatności, przez które atakujący może uruchomić swój kod na Twoim serwerze.
Jeśli Twoja strona, sklep internetowy lub bot działa na Node.js albo Next.js, zaktualizuj je. Zajmie to od 15 do 30 minut. Poniżej prosta instrukcja krok po kroku.
Czym są Node.js i Next.js
Wyobraź sobie samochód.
Node.js to silnik. Sprawia, że program działa na serwerze. Jeżdżą na nim tysiące stron, botów, API i sklepów internetowych.
Next.js to nadwozie i wnętrze. Gotowa baza dla strony: podstrony, obrazy, formularze. Next.js zawsze działa na Node.js.
W październiku znaleziono problemy zarówno w silniku, jak i w nadwoziu. Dlatego naprawić trzeba oba. Jeśli zaktualizujesz tylko Next.js, silnik zostanie z defektem. I odwrotnie.
Node.js: niebezpieczne rozpakowywanie
21 października Node.js wydał poprawki od razu dla 10 podatności. Najgroźniejsza z nich otrzymała numer CVE-2026-111497.
Na czym polega ten błąd. Aby dane szybciej przesyłały się przez sieć, są kompresowane. Jedna z popularnych metod kompresji nazywa się Brotli. Node.js potrafi rozpakowywać takie dane. W dekompresorze znaleziono błąd.
Wyobraź sobie próżniowy worek z rzeczami. Rozcinasz go i rzeczy zajmują swoje miejsce na półce. A teraz wyobraź sobie specjalnie przygotowany worek. Przy rozpakowaniu rzeczy wysypują się poza półkę i spadają na sąsiednie. Tak jest i tutaj: specjalnie przygotowane dane przy rozpakowywaniu zapisują się tam, gdzie nie powinny. Dzięki temu atakujący może uruchomić swój kod.
Kto jest zagrożony. Wszystkie aplikacje, które rozpakowują cudze skompresowane dane. Na przykład jeśli Twój serwer odbiera odpowiedzi od zewnętrznych API przez fetch() lub działa na Express 5.
Jeszcze trzy poważne błędy. Dotyczą sprawdzania certyfikatów i adresów. Wyobraź sobie ochroniarza sprawdzającego przepustki. Jeśli numer na przepustce zapisać specjalną czcionką, ochroniarz przepuści niewłaściwą osobę. Podobnie Node.js w niektórych przypadkach mógł uznać podróbkę za prawdziwy serwer.
Obejścia nie ma. Jedyną ochroną jest aktualizacja.
Next.js: obrazek z niespodzianką
14 października Next.js wydał pilną aktualizację. Zamyka ona dwie krytyczne podatności z oceną 9,5 na 10 i jedną wysoką.
Pierwsza: niebezpieczne obrazy SVG (CVE-2026-96889). Next.js potrafi sam zmniejszać i kompresować obrazy dla strony. W tym celu używa biblioteki sharp. Znaleziono w niej błąd przy przetwarzaniu obrazów w formacie SVG.
To jak koń trojański. Z zewnątrz zwykły obrazek. Ale w środku ukryty jest kod, który uruchamia się, gdy serwer zaczyna go przetwarzać. Jest to niebezpieczne, jeśli Twoja strona pozwala użytkownikom wgrywać obrazy. Podatne są wersje Next.js od 10 do 15.5.27 oraz od 16.0 do 16.4.0.
Druga: błąd w pamięci podręcznej (GHSA-673q-mjm6-r5xr). Dotyczy tylko nowych stron na Next.js 16 z włączoną funkcją Cache Components. Atakujący może uruchomić swój kod bez hasła. Tymczasowego rozwiązania nie ma, tylko aktualizacja.
Trzecia: odmowa usługi. Przez specjalne żądania do formularzy strony (Server Actions) można “zarzucić” serwer i strona przestanie się otwierać.
Ważna uwaga. Zwykłe sprawdzenie npm audit nie widzi wszystkich tych podatności. Dlatego nie warto polegać tylko na nim. Sprawdzaj wersje ręcznie, jak opisano poniżej.
Kogo to dotyczy
Node.js. Wszystkich, u kogo na serwerze działa coś na Node.js:
- strony na Next.js, Nuxt, Remix, Astro;
- API na Express, NestJS, Fastify;
- boty Telegram i Discord;
- panele administracyjne, panele zarządzania, sklepy internetowe w JavaScript;
- programy w kontenerach Docker na obrazach node:.
Next.js. Wszystkich, których strona jest zrobiona na Next.js w wersjach od 10 do 16.4.0 i działa na własnym serwerze lub VPS.
Node.js 20, 23, 25 i wcześniejsze wersje nie otrzymają poprawek. Ich wsparcie się skończyło. To jak telefon, dla którego nie wychodzą już aktualizacje bezpieczeństwa. Można z niego korzystać, ale z każdym miesiącem jest to bardziej ryzykowne.
Sprawdź wersje
Połącz się z serwerem przez SSH.
Wersja Node.js:
node -vWersje Next.js i sharp. Przejdź do folderu strony i wykonaj:
npm ls next sharpPorównaj z tabelą:
| Co | Bezpieczna wersja |
|---|---|
| Node.js 22 | 22.23.4 i wyższa |
| Node.js 24 | 24.22.1 i wyższa |
| Node.js 26 | 26.12.1 i wyższa |
| Node.js 20, 23, 25 i starsze | Poprawki nie ma, potrzebne przejście na 22, 24 lub 26 |
| Next.js 16 | 16.4.1 i wyższa (obecnie najnowsza to 16.4.3) |
| Next.js 15 | 15.5.28 i wyższa |
| Next.js 14 i starsze | Poprawki nie ma, potrzebne przejście na 15 lub 16 |
| sharp | 0.35.5 i wyższa |
Na serwerze może być kilka instalacji Node.js. Na przykład jeśli instalowałeś go przez nvm lub działa wewnątrz Dockera. Polecenie node -v pokaże tylko jedną. Sprawdź jeszcze procesy, które faktycznie są uruchomione:
ps aux | grep nodeZaktualizuj Node.js
Sposób zależy od tego, jak zainstalowano Node.js.
Jeśli przez nvm (najczęstszy wariant u programistów):
nvm install 24
nvm alias default 24Zamiast 24 podstaw swoją gałąź: 22, 24 lub 26. nvm sam zainstaluje najnowszą wersję tej gałęzi.
Jeśli przez menedżer pakietów Ubuntu lub Debian:
sudo apt update
sudo apt install --only-upgrade nodejsJeśli w Dockerze. Zmień wersję w pierwszej linii Dockerfile. Na przykład:
FROM node:24.22.1-bookworm-slimPo aktualizacji ponownie wykonaj node -v i upewnij się, że wersja jest zgodna z tabelą.
Jeśli masz Node.js 20 lub starszy. Przejście na 22 lub 24 to już nie zwykła aktualizacja, a przeprowadzka. Jak z Windows 7 na Windows 11: większość programów zadziała, ale coś może się zepsuć. Najpierw sprawdź stronę na serwerze testowym.
Zaktualizuj Next.js i sharp
Przed aktualizacją zapisz kopię projektu lub zrób commit w git. Jeśli coś pójdzie nie tak, wrócisz w minutę.
Next.js 16:
npm install next@latest eslint-config-next@latestNext.js 15:
npm install next@15.5.28
npm install sharp@^0.35.5Drugie polecenie jest ważne. Na Next.js 15 po aktualizacji często zostaje stara sharp 0.34. Wtedy luka z obrazami pozostaje otwarta.
Sprawdź wynik:
npm ls next sharpI zbuduj stronę ponownie:
npm run buildBonus. Jeśli dawno nie aktualizowałeś, ta aktualizacja zamknie też podatności naprawione we wrześniu. Wtedy Next.js wydał jeszcze jedną poprawkę niebezpiecznego błędu w generowaniu obrazów i siedem poprawek dotyczących pamięci podręcznej i ochrony danych.
Zrestartuj i zbuduj ponownie
Po aktualizacji nowa wersja leży na dysku. Ale stara nadal działa w pamięci, dopóki jej nie zrestartujesz. To jak kupić nowe opony i wozić je w bagażniku. Samochód wciąż jedzie na starych.
Jeśli strona jest uruchomiona przez PM2:
pm2 restart allJeśli przez systemd (zamiast mysite podaj nazwę swojej usługi):
sudo systemctl restart mysiteJeśli w Dockerze:
docker compose build --pull
docker compose up -dFlaga --pull zmusza Docker do pobrania świeżego obrazu bazowego. Bez niej może wziąć stary z pamięci podręcznej.
Po restarcie otwórz stronę i sprawdź główne podstrony, formularze i wgrywanie obrazów.
Lista kontrolna
- Sprawdziłem wersję Node.js poleceniem node -v
- Sprawdziłem, czy nie ma innych uruchomionych Node.js
- Zaktualizowałem Node.js do 22.23.4, 24.22.1 lub 26.12.1
- Zapisałem kopię projektu przed aktualizacją
- Zaktualizowałem Next.js do 16.4.1+ lub 15.5.28+
- Sprawdziłem, że sharp nie jest niższa niż 0.35.5
- Zbudowałem stronę ponownie poleceniem npm run build
- Zrestartowałem aplikację lub kontenery
- Sprawdziłem, że strona, formularze i obrazy działają
Nie chcesz się w to zagłębiać sam?
Na papierze wszystko wygląda prosto. W praktyce po aktualizacji Next.js build może się wywalić z niezrozumiałym błędem. Albo na serwerze okażą się trzy różne wersje Node.js i nie wiadomo, która z nich obsługuje stronę. Albo przejście z Node.js 20 pociągnie za sobą aktualizację połowy zależności.
Na takie przypadki Zomro ma dwie opcje.
SOD: zaktualizujemy za Ciebie
Nasz administrator systemów:
- znajdzie wszystkie wersje Node.js na serwerze i w kontenerach;
- zaktualizuje Node.js, Next.js i sharp do bezpiecznych wersji;
- zbuduje ponownie i zrestartuje aplikację;
- sprawdzi, że strona działa po aktualizacji.
Koszt: €12.50 za każde 15 minut pracy.
[Zamów aktualizację]
Premium: szybka pomoc, gdy jest potrzebna
Jeśli strona przestała działać po aktualizacji, każda godzina przestoju kosztuje pieniądze. Na zwykłe zgłoszenie techniczne odpowiedź może zająć do 10 godzin. Z Premium odpowiadamy w czasie od 5 do 30 minut.
Node.js i Next.js wydają poprawki bezpieczeństwa prawie co miesiąc. Z Premium nie będziesz musiał radzić sobie z nimi sam.
[Podłącz Premium]

