Next.js 16.4.5: aktualizacja bezpieczeństwa, kogo dotyczy
Next.js 16.4.5 i 15.5.29 z 3 listopada 2026 łatają siedem luk, w tym cztery w use cache i Cache Components. Kogo dotyczą, która linia ma poprawki i jak łatać.

Next.js 16.4.5 i 15.5.29, czyli listopadowa aktualizacja bezpieczeństwa z 2026 roku, łatają siedem luk, z czego cztery w use cache i Cache Components. Obie wersje trafiły do npm 3 listopada 2026, o 18:01 i 18:36 UTC, a tag latest wskazuje teraz 16.4.5. Na Next.js 16 uruchom npm install next@16.4.5, na 15 – npm install next@15.5.29. Dotyczy to także Next.js 16.4.4, wydania z poprawkami błędów z poprzedniego dnia, które żadnej z tych luk nie naprawia. 15.5.29 ma trzy poprawki: wstrzykiwanie odpowiedzi za proxy, obejście blokady SVG w optymalizacji obrazów i nagłówek z ciasteczkami w trasach Edge. Pozostałe cztery dotyczą tylko aplikacji 16.x z Cache Components lub use cache. Jeśli używasz Cache Components z root params, hostujesz sam przez next start, ustawiasz ciasteczka w trasach Edge albo optymalizujesz zdalne obrazy, zaktualizuj dziś, a my wyczyścilibyśmy też każdy cache, który przeżywa deploy. Każde twierdzenie poniżej sprawdziliśmy 4 listopada 2026 w advisories, wydaniach na GitHubie, rejestrze npm i na blogu Next.js. Żadnej z luk nie odtwarzaliśmy.
Co się zmieniło w Next.js 16.4.5 i 15.5.29
Noty wydania 16.4.5 (otwiera się w nowej karcie) wymieniają siedem advisories, a noty wydania 15.5.29 (otwiera się w nowej karcie) trzy z nich. W porównaniu 16.4.4 i 16.4.5 (otwiera się w nowej karcie) wydanie to osiem commitów: po jednej poprawce na advisory i podbicie wersji, bez innych zmian. Porównanie 15.5.28 i 15.5.29 (otwiera się w nowej karcie) dokłada do trzech poprawek trzy commity, które dotyczą tylko procesu wydań i CI samego Next.js. W rejestrze npm (otwiera się w nowej karcie) obie wersje mają te same zależności zewnętrzne, zakres peer dla Reacta i zakres Node.js co poprzednia łatka (>=20.9.0 w 16.4.5), a jedyną inną zmianą jest @next/, przypięty do dokładnej wersji next, który przesuwa się razem z nim w lockfile.
| Wersja | W npm (UTC) | Linia | dist-tag 4 listopada | Poprawki z listopada |
|---|---|---|---|---|
| 16.4.4 | 2 lis 2026, 10:49 | 16.x, Active LTS | - | Brak |
| 16.4.5 | 3 lis 2026, 18:01 | 16.x, Active LTS | latest | Wszystkie siedem |
| 15.5.28 | 14 paź 2026, 17:36 | 15.x, Maintenance LTS | - | Brak |
| 15.5.29 | 3 lis 2026, 18:36 | 15.x, Maintenance LTS | backport | Wstrzykiwanie odpowiedzi, obejście SVG, nagłówek Edge |
Każde advisory ma na GitHubie poziom zagrożenia, wynik CVSS 4.0 i identyfikator CVE; odczytaliśmy je 4 listopada przez API advisories GitHuba (otwiera się w nowej karcie). Wpis Next.js (otwiera się w nowej karcie) podaje własną ocenę i żadnego CVE:
| Advisory | Co idzie nie tak | Blog Next.js | GitHub (CVSS 4.0) | Poprawka w |
|---|---|---|---|---|
| GHSA-mfr8-8qww-v76h (otwiera się w nowej karcie), CVE-2026-119790 | Wynik use cache dla jednej wartości root param trafia do innych, gdy funkcję wywołuje też unstable_cache | High | Moderate (6,3) | 16.4.5 |
| GHSA-vc7v-qv4w-wrv8 (otwiera się w nowej karcie), CVE-2026-119351 | Zewnętrzny wpis use cache zapisuje się bez root param, który odczytał wewnętrzny | Medium | Moderate (6,3) | 16.4.5 |
| GHSA-vvgp-ww4w-46vf (otwiera się w nowej karcie), CVE-2026-119350 | Jedno żądanie może zatruć powłokę fallback, którą dzieli cała rodzina tras | Medium | Moderate (6,3) | 16.4.5 |
| GHSA-rhh4-g77r-r9qj (otwiera się w nowej karcie), CVE-2026-119349 | Różne binarne argumenty funkcji use cache dostają ten sam klucz cache | Medium | Moderate (6,3) | 16.4.5 |
| GHSA-pc58-hwjq-p385 (otwiera się w nowej karcie), CVE-2026-119348 | Przekazana dalej odpowiedź z fetch zachowuje nagłówki ramkowania skompresowanej treści przy rozpakowanym body | Medium | Moderate (6,3) | 16.4.5, 15.5.29 |
| GHSA-7qx7-33qx-rqx2 (otwiera się w nowej karcie), CVE-2026-119347 | SVG podszyte pod AVIF omija dangerouslyAllowSVG: false | Medium | Moderate (6,9) | 16.4.5, 15.5.29 |
| GHSA-f3mh-rxg3-f5g2 (otwiera się w nowej karcie), CVE-2026-119346 | Ciasteczko ustawione w trasie Edge ląduje w nagłówku x-middleware-set-cookie, który JavaScript z tego samego originu może odczytać | Medium | Moderate (6,0) | 16.4.5, 15.5.29 |
Root param to parametr trasy w root layoucie, na przykład [locale] albo [tenant] w app/, odczytywany przez next/. Według advisories wpis use cache powinien zależeć od każdego root param, który odczytuje jego funkcja, obok argumentów, z których use cache buduje klucz wpisu. Dwa z czterech błędów cache gubią root param z klucza, więc aplikacja, która rozdziela najemców, serwisy albo języki przez root param, może podać zbuforowane dane jednego najemcy drugiemu.
Czy listopadowe luki są wysokie czy średnie?
Jedno i drugie, zależnie od źródła. Zapowiedź z 27 października (otwiera się w nowej karcie) mówiła o „seven medium vulnerabilities”. Wpis z 3 listopada nazywa wyciek przez unstable_cache lukę High, a pozostałe sześć Medium. Advisories na GitHubie i obie noty wydania dają wszystkim siedmiu Moderate. Wyniki leżą blisko siebie: sześć advisories ma od 6,0 do 6,3, a obejście SVG ma 6,9, najwięcej, jako jedyne z wektorem CVSS bez wymagań ataku (AT:N) przy niskiej złożoności i bez udziału użytkownika. Jeśli śledzisz wyciek przez unstable_cache, zapisz ocenę High, bo wyciek między najemcami to poważna sprawa dla aplikacji multi-tenant, niezależnie od wyniku.
Kogo dotyczą luki Next.js z listopada 2026
Każde advisory wymaga konkretnej konfiguracji. Znajdź swoją w lewej kolumnie; warunki pochodzą z advisories i wpisu Next.js.
| Dotyczy cię, jeśli | Advisory | Linie |
|---|---|---|
Masz włączone Cache Components, a jedna publiczna funkcja use cache, która odczytuje root param, jest wywoływana bezpośrednio i wewnątrz unstable_cache, a wywołanie przez unstable_cache trafia na trwające pierwsze wypełnienie wpisu po starcie procesu (poza tym wyścigiem takie zagnieżdżenie rzuca błąd) | GHSA-mfr8 | 16.x od 16.3.0 |
Wewnętrzna funkcja use cache odczytuje root param i zwraca gotowe dane obok wciąż oczekującego promise, a zewnętrzna funkcja use cache kończy się, nie czekając na niego | GHSA-vc7v | 16.x od 16.2.0 |
Hostujesz sam przez next start, z cacheComponents: true i partialPrefetching nieustawionym lub false, a trasa dynamiczna ma blokującą powłokę fallback o kształcie opisanym w advisory | GHSA-vvgp | 16.x od 16.4.0 |
Funkcja use cache przyjmuje binarne argumenty (Uint8Array, Blob), które odróżniają użytkowników lub konta | GHSA-rhh4 | 16.x |
Hostujesz sam, route handler albo fetch cache zwraca pobrany Response bez zmian, a reverse proxy HTTP/1.1 kolejkuje żądania z pipeliningiem na wspólnym połączeniu z backendem | GHSA-pc58 | 16.x, 15.x i starsze |
Hostujesz sam optymalizator obrazów (/), zostawiasz images.dangerouslyAllowSVG na domyślnym false, optymalizujesz obrazy z dozwolonego źródła, nad którym atakujący ma kontrolę, i używasz natywnego backendu, który umie dekodować SVG | GHSA-7qx7 | 16.x, 15.x |
Route handler Edge w App Routerze albo trasa API Edge w Pages Routerze ustawia ciasteczko przez NextResponse.cookies.set() | GHSA-f3mh | 16.x, 15.x |
Wpis Next.js zawęża dwie z nich. Wyciek ciasteczek w Edge nie odtworzył się w route handlerach Node.js ani przy cookies().set(). Wymaga też, by na twoim originie działał już JavaScript atakującego, więc nie jest sposobem na uruchomienie skryptu. Wstrzykiwanie odpowiedzi wymaga opisanego zachowania proxy z pipeliningiem i nie dotyczy każdego reverse proxy. Trzy advisories (zatrucie powłoki, wstrzykiwanie odpowiedzi i obejście SVG) opisują wyłącznie self-hosting. Wpis w changelogu Netlify o lukach Next.js (otwiera się w nowej karcie), zaktualizowany 4 listopada, wymienia cztery z siedmiu jako dotyczące stron na Netlify i wydaje adapter @netlify/ 5.16.6 na przypadek ciasteczek w Middleware.
Jak sprawdzić, czy twoja aplikacja używa podatnych wzorców
Z katalogu głównego projektu te polecenia znajdą konfiguracje z tabeli:
npx next --version # poniżej 16.4.5 lub 15.5.29: aktualizuj
grep -rn "cacheComponents\|partialPrefetching" next.config.*
grep -rln "next/root-params" app src lib 2>/dev/null # root params w kodzie z cache
grep -rln "unstable_cache" app src lib 2>/dev/null # razem z "use cache": GHSA-mfr8
grep -rln "runtime = \"edge\"" app src pages 2>/dev/null # trasy Edge: szukaj cookies.set()Przy ciasteczkach w Edge wyślij żądanie do trasy, która ustawia ciasteczko, i poszukaj wewnętrznego nagłówka w odpowiedzi. Po aktualizacji commit z poprawką (otwiera się w nowej karcie) usuwa go z odpowiedzi Edge:
curl -s -D - -o /dev/null https://your-app.example/api/login | grep -i x-middleware-set-cookieKtóre wersje Next.js dostają poprawkę?
Tylko dwie linie LTS. Polityka wsparcia Next.js (otwiera się w nowej karcie) stawia 16.x w Active LTS, a 15.x w Maintenance LTS z aktualizacjami bezpieczeństwa do 31 stycznia 2027; 14.x i starsze nie są wspierane. W npm 3 listopada nie pojawiło się żadne wydanie 16.2.x ani 16.3.x: najnowsze to wciąż 16.2.12 (25 lipca) i 16.3.8 (30 września).
- Od 16.0 do 16.4.4: przejdź na 16.4.5. Nie ma backportu dla 16.2 ani 16.3, więc razem z łatką dostajesz aktualizację wersji minor. Przed przejściem przeczytaj noty wydania 16.4.4 (otwiera się w nowej karcie) i zmiany w 16.4.
- Od 15.0 do 15.5.28: przejdź na 15.5.29. Luki w cache nie dotyczą 15.x.
- 14.x i starsze: advisory o wstrzykiwaniu odpowiedzi ma w polu wersji jednocześnie
>= 16.0.0i< 16.0.0, co czytamy jako każdą wersję, a najnowsze 14.x w npm to wciąż 14.2.35 z grudnia 2025. Pozostałe sześć nie wymienia żadnej wersji poniżej 15.0.0. Advisory nie podaje obejścia, a 14.x nie dostaje łatki, więc wyjściem jest 15.5.29 albo 16.4.5. Pola z wersjami w samych advisories czytaj ostrożnie. 4 listopada większość z nich nie podawała żadnej wersji z poprawką. Advisory o zagnieżdżonymuse cachewskazywało 16.4.2, czemu przeczą noty wydania 16.4.5, a trzy podawały 16.4.2 jako ostatnią podatną wersję, choć 16.4.3 i 16.4.4 nie mają żadnej poprawki bezpieczeństwa. Żadnego z siedmiu nie było jeszcze w globalnej GitHub Advisory Database (jej API zwracało 404 dla każdego), a Dependabot alarmuje tylko o advisories zweryfikowanych przez GitHuba (otwiera się w nowej karcie). Brak alertu Dependabota nie znaczy więc dziś, że masz łatkę. Kieruj się notami wydania: 16.4.5 i 15.5.29.
Jak zaktualizować Next.js do 16.4.5 lub 15.5.29
Sprawdź, którą wersję masz
Uruchom
npx next --versionalbonpm ls next. W monorepo sprawdź każdą aplikację: każda, która rozwiązuje się do wersji poniżej 16.4.5 na 16.x albo poniżej 15.5.29 na 15.x, wymaga aktualizacji.Zainstaluj wersję z poprawkami
Uruchom
npm install next@16.4.5na 16.x albonpm install next@15.5.29na 15.x (pnpm addiyarn adddziałają tak samo). Node.js i zakres peer dla Reacta się nie zmieniają, więcreactireact-domzostają bez zmian.Sprawdź, co rozwiązał lockfile
Uruchom ponownie
npm ls nexti wdrażaj z czystej instalacji. Zakres z daszkiem, np.^16.4.4wpackage.json, bierze 16.4.5 dopiero po aktualizacji lockfile.Wyczyść cache, który przeżywa deploy
Wpisy zapisane przed poprawką zostają błędne także po niej: wyciek przez
unstable_cachetrwa, dopóki wpis nie zostanie zrewalidowany lub usunięty, a zatruta powłoka zachowuje swój błąd 404 po restartach. Advisories nie każą niczego czyścić; to nasza własna rada: jeśli używasz współdzielonego cache handlera albo trwałego wolumenu na cache, wyczyść go po aktualizacji. Na Netlify postępuj według jego changelogu: wyczyść branch deploys i Deploy Previews, których deploy produkcyjny nie czyści.Obejścia stosuj tylko, dopóki nie możesz zaktualizować
Advisory o
unstable_cachepodaje, że niewywoływanie funkcjiuse cachewewnątrzunstable_cachejest pełnym obejściem. Obejście dla powłoki topartialPrefetching: truewnext.config. Pozostałe pięć nie podaje żadnego, więc zaktualizuj, gdy tylko możesz.
Na co uważać
- 16.4.4 nie ma łatki. Ukazało się dzień wcześniej i to wydanie z poprawkami błędów. Zgłoszenie bezpieczeństwa zamykaj dopiero na 16.4.5 albo 15.5.29.
- Komentarz przy instalacji mówi „16.5”. We wpisie Next.js linia
npm install next@16.4.5ma komentarz# for 16.5. Polecenie jest poprawne. 16.5 jest wciąż w canary (16.5.0-canary.40w npm 4 listopada), więc nie szukaj wydania 16.5. - Wpis o wydaniu nie linkuje advisory o powłoce. Opisuje zatrucie współdzielonej powłoki bez linku. GHSA-vvgp-ww4w-46vf jest w notach wydania 16.4.5.
- Brak doniesień o atakach. Żadne ze źródeł nie wspomina o wykorzystaniu luk w praktyce ani o publicznym proof of concept. Advisories są publiczne od 3 listopada, więc to nie powód, by czekać.
- Kiedy czytaliśmy źródła. Wpisy Next.js, oba wydania na GitHubie, siedem advisories, rejestr npm, politykę wsparcia i changelog Netlify – wszystko 4 listopada 2026. Nie uruchamialiśmy 16.4.5 na demo i nie odtwarzaliśmy żadnej luki.
Jakie luki łata Next.js 16.4.5?
Siedem, opublikowanych jako advisories na GitHubie 3 listopada 2026: dwa wycieki cache między wartościami root params (use cache wywołane przez unstable_cache oraz zagnieżdżone use cache), zatrucie współdzielonej powłoki fallback przy self-hostingu z next start, wspólne klucze cache dla binarnych argumentów use cache, wstrzykiwanie odpowiedzi za proxy HTTP/1.1 z pipeliningiem, obejście blokady SVG w optymalizacji obrazów i wyciek ciasteczek HttpOnly w trasach Edge. 16.4.5 zawiera te siedem poprawek i nic więcej.
Czy listopadowa aktualizacja Next.js to luki wysokie czy średnie?
Zależy od źródła. Blog Next.js ocenia GHSA-mfr8-8qww-v76h (use cache wywołane przez unstable_cache) jako High, a pozostałe sześć jako Medium. Advisories na GitHubie i obie noty wydania dają wszystkim siedmiu Moderate, z wynikami CVSS 4.0 od 6,0 do 6,9, a zapowiedź z 27 października mówiła o siedmiu średnich lukach.
Które wersje Next.js są podatne na luki z listopada 2026?
Każde wydanie 16.x przed 16.4.5 ma co najmniej jedną z nich, także 16.4.4, które nie zawiera żadnej poprawki bezpieczeństwa. Na 15.x trzy advisories dotyczą wersji do 15.5.28 i są naprawione w 15.5.29. Linie 16.2 i 16.3 nie dostały nowej łatki, więc te aplikacje przechodzą na 16.4.5. Advisory o wstrzykiwaniu odpowiedzi w polu wersji obejmuje też wersje poniżej 16.0.0, a niewspierane 14.x nie ma wersji z poprawką.
Jak zaktualizować Next.js do 16.4.5 lub 15.5.29?
Uruchom npm install next@16.4.5 na 16.x albo npm install next@15.5.29 na 15.x (pnpm add i yarn add działają tak samo), a potem sprawdź, czy lockfile rozwiązał tę wersję. Wymagania Node.js i Reacta są takie same jak w 16.4.4 i 15.5.28. Jeśli twój cache przeżywa deploy, radzimy też wyczyścić go po aktualizacji, bo według advisories podatne wpisy trwają, dopóki nie zostaną zrewalidowane lub usunięte.
Czy luki CVE w Next.js z listopada 2026 są wykorzystywane?
Ani wpis Next.js, ani żadne z siedmiu advisories nie wspomina o wykorzystaniu luk w praktyce ani o publicznym proof of concept, stan na 4 listopada 2026. Advisories ukazały się 3 listopada razem z łatkami, więc szczegóły są już publiczne: zaktualizuj, zamiast czekać na doniesienia.