Przejdź do treści
← Wróć do bloga
BezpieczeństwoNode2Shell, październik 2026

Node2Shell (CVE-2026-111497): jak załatać Node.js, Next.js i Bun

Node2Shell to luka w dekoderze Brotli w Node.js, przez którą spreparowane dane mogą ujawnić pamięć procesu albo uruchomić obcy kod. Dotyczy Express 5, fetch() i samodzielnie hostowanego Next.js. Naprawiają ją Node.js 22.23.4, 24.22.1 i 26.12.1 oraz Bun 1.4.4. Instrukcja i pomoc.

Spreparowane dane Brotli mogą zawiesić proces Node.js, ujawnić jego pamięć albo uruchomić obcy kod z uprawnieniami aplikacji. Pomaga tylko nowa wersja środowiska.

Autor

Syntalith

Opublikowano Zaktualizowano 5 min czytania

Node2Shell to luka CVE-2026-111497 w dekoderze Brotli, który Node.js ma wbudowany. Według Node.js (2026) spreparowane dane mogą spowodować zapis poza buforem pamięci i zdalne uruchomienie kodu. Node.js ocenia lukę jako wysoką. Naprawiają ją Node.js 22.23.4, 24.22.1 i 26.12.1, wydane 21 października 2026 r., oraz Bun 1.4.4.

Brotli to format kompresji, którym serwery zmniejszają ruch w sieci. Node.js rozpakowuje go sam, gdy fetch() dostaje skompresowaną odpowiedź albo gdy Express 5 przyjmuje skompresowane zapytanie. Na Node.js działa Next.js, Nuxt, NestJS i większość dzisiejszych API pisanych w JavaScripcie. Dlatego luka dotyczy wielu aplikacji, które nigdy nie wołają Brotli wprost.

Co to jest Node2Shell i jak groźna jest ta luka

Dekoder Brotli w Node.js można oszukać spreparowanymi danymi tak, że zapisze dane poza końcem bufora pamięci. To klasyczna droga do awarii procesu i do uruchomienia obcego kodu. Vercel pisze, że badacze pokazali na niezałatanych gałęziach 22.x, 24.x i 26.x ujawnienie pamięci procesu i uruchomienie poleceń w procesie Node.js. Kod działa wtedy z uprawnieniami procesu, czyli z uprawnieniami Waszej aplikacji.

Proces aplikacji Node.js zwykle trzyma w pamięci i w zmiennych środowiskowych wszystko, czego potrzebuje do pracy: hasło do bazy danych, klucze do Stripe, poczty, chmury i API modeli AI, tokeny sesji zalogowanych użytkowników. Samo ujawnienie pamięci może wystarczyć, żeby część z nich wyciekła, nawet bez przejęcia serwera.

Trzy rzeczy sprawiają, że ta luka jest groźna:

  • Atak nie wymaga logowania. Wystarczy wysłać spreparowane zapytanie do serwera z Express 5 albo podstawić skompresowaną odpowiedź serwerowi, który pobiera dane z innych adresów.
  • Exploit działa na oficjalnych wersjach. Imperva uruchomiła kod na oficjalnym obrazie Node.js 24.22.0 dla Linux arm64, bez żadnych modyfikacji.
  • Część aplikacji nie dostanie poprawki. Gałęzie 25.x, 23.x, 20.x i starsze skończyły wsparcie.

Co może się stać z Twoją firmą: przykłady

Co atakujący może zrobićCo to znaczy dla firmy
Odczytać z pamięci hasło do bazy i skopiować bazę klientówWyciek danych osobowych, zgłoszenie do UODO, list do każdego klienta
Wyciągnąć klucze API: płatności, poczty, chmury, modeli AIRachunki za cudze użycie, wysyłka phishingu z Waszej domeny
Przejąć tokeny sesji zalogowanych użytkownikówKtoś działa w panelu jako Wasz klient albo administrator
Uruchomić polecenia na serwerze aplikacjiZmiana cen, zamówień i danych, tylne drzwi w kodzie, okup
Zawiesić proces Node.js powtarzanym zapytaniemSklep albo aplikacja przestaje działać, dopóki ktoś nie zareaguje

Wyciek danych klientów ma też skutki prawne. Według RODO (2016) firma ma 72 godziny od wykrycia naruszenia na zgłoszenie go organowi nadzorczemu, w Polsce UODO. Według RODO (2016) za naruszenie obowiązków bezpieczeństwa i zgłaszania grozi kara do 10 mln euro albo do 2% całkowitego rocznego obrotu, zależnie od tego, która kwota jest wyższa. Źródło: RODO, rozporządzenie 2016/679, art. 33 i art. 83 ust. 4.

Node2Shell w liczbach: statystyki 2026

Dane sprawdziliśmy 23 października 2026 r.

  • Według W3Techs (2026) Node.js obsługuje 7,4% stron internetowych, których serwer da się ustalić.
  • Według W3Techs (2026) Next.js, działający na Node.js, jest na 3,7% wszystkich stron internetowych.
  • Według Vercel (2026) te same wydania Node.js naprawiają 9 innych błędów, w tym 2 wysokie obejścia weryfikacji nazwy serwera w TLS.
  • Według Imperva (2026) atak zadziałał na Express od 5.0.0 do 5.3.0 i body-parser od 2.0.0 do 2.3.0, choć wymagał kilku prób.
  • Według Aikido (2026), powołującego się na The Hacker News, do 22 października nie zgłoszono ataków poza laboratoriami.

Źródła: Node.js, wydania bezpieczeństwa z 21 października 2026, Vercel, W3Techs, Node.js, W3Techs, Next.js, Imperva, Aikido.

Next.js, Express i fetch(): którędy wchodzi atak

Vercel zaznacza, że Node.js sam nie rozpakowuje danych Brotli. Aplikacja jest narażona, gdy jej kod albo biblioteka rozpakowuje dane Brotli kontrolowane przez atakującego. Typowe drogi:

DrogaKiedy jest groźna
Express 5 i body-parser 2.xRozpakowują ciała zapytań z nagłówkiem Content-Encoding: br, który może wysłać każdy klient
fetch()Rozpakowuje odpowiedzi Brotli automatycznie, więc groźne są webhooki i adresy podane przez użytkownika
Next.js hostowany samodzielnieWedług Vercel Next.js nie blokuje odpowiedzi Brotli w optymalizacji obrazów, która pobiera obrazy z innych serwerów
node:zlibKażde niezaufane dane przekazane do funkcji Brotli w tym module

Next.js na Vercel: gałęzie 22.x i 24.x aktualizuje sam Vercel, a jego WAF blokuje atak w zapytaniach przychodzących. Projekty na Node.js 20.x muszą zmienić wersję na 22.x albo 24.x i wdrożyć się ponownie. Next.js na własnym serwerze, w Dockerze albo u innego dostawcy trzeba zaktualizować samemu.

Które wersje Node.js są podatne, a które naprawione

GałąźStatusWersja z poprawką
Node.js 26.xBieżąca26.12.1
Node.js 24.xDługie wsparcie (LTS)24.22.1
Node.js 22.xDługie wsparcie (LTS)22.23.4
Node.js 25.x, 23.x, 20.x i starszeKoniec wsparciaBrak
BunBieżąca1.4.4

Te same wydania Node.js aktualizują też certyfikaty główne i usuwają zaufanie do skompromitowanych certyfikatów eMudhra, więc jedna aktualizacja zamyka oba problemy.

Jeśli Node.js pochodzi z paczki dystrybucji Linuksa, na przykład Debiana, Ubuntu, Fedory albo Alpine, może korzystać z systemowej biblioteki Brotli. Wtedy poprawka przychodzi z paczką Brotli dystrybucji. Projekt Brotli wydał tę samą poprawkę w wersjach 1.2.1, 1.1.1 i 1.0.10.

Jak załatać Node2Shell: instrukcja krok po kroku

  1. Sprawdź node --version na serwerach, w CI, na laptopach zespołu i w każdym obrazie kontenera.
  2. Zaktualizuj Node.js do 22.23.4, 24.22.1 albo 26.12.1, zależnie od gałęzi.
  3. Zmień przypięte tagi obrazów. Obraz przypięty do node:24.22.0 pozostaje podatny przy każdej przebudowie.
  4. Przebuduj obrazy i wdroż usługi ponownie.
  5. Sprawdź wersję w działających kontenerach na produkcji.
  6. Zaktualizuj Bun do 1.4.4 lub nowszego.
  7. Przenieś aplikacje z Node.js 25.x, 23.x, 20.x i starszych na wspieraną gałąź i uruchom testy.

Polecenia:

node --version                           # serwer, laptop, maszyna w CI
docker run --rm <obraz> node --version   # każdy obraz kontenera
npm ls express body-parser               # Express 5 i body-parser 2.x
grep -rn "brotliDecompress\|createBrotliDecompress" src/   # wywołania Brotli w kodzie
docker build --pull --no-cache -t <obraz> .               # przebudowa na nowej bazie

Lista paczek w repozytorium może pominąć Node.js wbudowany w obraz, więc sprawdzaj wersję w samym obrazie. Platformy, które dostarczają własny Node.js, mogą spóźniać się z aktualizacją. Sprawdź, jaką wersję uruchamia Twój dostawca.

Co zrobić, jeśli nie możesz zaktualizować dziś

Komunikat Node.js nie podaje obejścia. Aikido opisuje dwa sposoby na zmniejszenie ryzyka:

  • Odrzucaj zapytania z nagłówkiem Content-Encoding: br na reverse proxy, load balancerze albo w middleware aplikacji.
  • Włącz reguły na brzegu sieci, jeśli platforma je ma. Vercel dodał takie reguły 21 października, Imperva dodała własne reguły WAF.

Żaden z tych sposobów nie chroni odpowiedzi Brotli, które aplikacja pobiera z innych serwerów. Vercel pisze wprost, że pobrane odpowiedzi chroni tylko aktualizacja środowiska.

Jak Syntalith pomaga załatać Node2Shell

Zrobiliśmy to już u siebie. 23 października przenieśliśmy naszą stronę na Next.js, system rezerwacji i serwer MCP na Node.js 24.22.1, a potem sprawdziliśmy wersję w działających kontenerach.

U klientów robimy to samo, od listy usług po sprawdzenie wyniku. Najpierw spisujemy Node.js i Bun na serwerach, w CI, w obrazach kontenerów i u dostawców platform. Potem aktualizujemy w pierwszej kolejności usługi, które przyjmują zapytania z internetu albo pobierają dane z obcych serwerów, w tym Next.js hostowany samodzielnie. Zmieniamy przypięte tagi obrazów, przebudowujemy i wdrażamy ponownie. Aplikacje z Node.js 20.x, 23.x i 25.x przenosimy na wspieraną gałąź i sprawdzamy testami, czy działają.

Na koniec sprawdzamy wersję w środowisku produkcyjnym i dajemy raport na piśmie: co było podatne, co zaktualizowaliśmy, co zostało. Pracujemy na Waszej infrastrukturze, z dostępami tylko na czas zadania.

Zacznij od bezpłatnej, 30-minutowej rozmowy z inżynierem. Powiedz, gdzie działa Node.js, a my powiemy, od czego zacząć i ile to potrwa. Umów rozmowę.

W tym samym tygodniu pojawiły się luki PHP2Shell w PHP i problem z certyfikatami eMudhra.

Najczęstsze pytania

Co to jest Node2Shell?
Node2Shell to nazwa luki CVE-2026-111497 w dekoderze Brotli wbudowanym w Node.js. Spreparowane dane Brotli powodują zapis poza buforem pamięci. Badacze pokazali ujawnienie pamięci procesu i uruchomienie poleceń w procesie Node.js. Node.js ocenia lukę jako wysoką.
Które wersje Node.js naprawiają CVE-2026-111497?
Node.js 22.23.4, 24.22.1 i 26.12.1 oraz nowsze wydania tych gałęzi. Bun naprawia lukę w wersji 1.4.4. Node.js 25.x, 23.x, 20.x i starsze nie dostaną poprawki.
Czy Next.js jest podatny na Node2Shell?
Next.js działa na Node.js. Vercel zaznacza, że Next.js nie blokuje odpowiedzi Brotli w optymalizacji obrazów, więc samodzielnie hostowany Next.js trzeba przenieść na Node.js z poprawką. Na Vercel gałęzie 22.x i 24.x aktualizuje sam Vercel, a projekty na 20.x muszą zmienić wersję.
Czy Express i body-parser są podatne?
Express 5 i body-parser 2.x rozpakowują ciała zapytań z nagłówkiem Content-Encoding: br, więc przekazują dane do podatnego dekodera. Sama luka siedzi w Node.js, więc naprawia ją aktualizacja Node.js.
Czy Syntalith może zaktualizować nasze usługi Node.js?
Tak. Inżynier spisuje wersje Node.js na serwerach, w CI i w obrazach, aktualizuje je, przebudowuje obrazy i sprawdza wersję działającą na produkcji. Zaczynamy od bezpłatnej, 30-minutowej rozmowy.

Aktualizacje bezpieczeństwa

Nie wiesz, czy Wasze serwery są już załatane?

Powiedz inżynierowi w 30 minut, gdzie działają strona, sklep i aplikacje. Spiszemy podatne wersje, zaktualizujemy je, wdrożymy usługi ponownie i sprawdzimy wynik na produkcji.

Rozmowa z inżynierem
0 zł30 minut, plan prac na piśmie w 2 dni robocze
Zakres
PHP, Node.js, Go, certyfikatyserwery, kontenery, hosting i CI
Na koniec
raport na piśmieco było podatne, co zaktualizowaliśmy, co zostało

Terminy zobaczysz w swojej strefie czasowej.

Poznaj inżynierów, którzy wykonają pracę

Co Ci daje, że jesteśmy partnerem OpenAI i Anthropic?

OpenAI robi ChatGPT, a Anthropic robi Claude. Należymy do programów partnerskich obu firm, więc pracujemy z ich narzędziami na co dzień i uczymy się od samych twórców.

OpenAI Select PartnerClaude Partner Network
01Dobierzemy narzędzie do zadania
Wdrażamy i ChatGPT, i Claude. Oba sprawdzamy na Twoich dokumentach, a Ty wybierasz to, które robi mniej poprawek i oszczędza więcej czasu.
02Wiedza prosto od twórców
Uczymy się z oficjalnych kursów i materiałów OpenAI i Anthropic. Twój zespół poznaje funkcje i ustawienia, które działają dziś.
03Licencje bez naszej marży
Konta kupujesz bezpośrednio u OpenAI albo Anthropic i dostajesz od nich fakturę. Do licencji nic nie doliczamy.
04Certyfikowani inżynierowie
W zespole mamy certyfikat AWS z uczenia maszynowego i certyfikat Anthropic z architektury systemów na Claude.

Udział w programach nie oznacza, że OpenAI albo Anthropic polecają nasze usługi.