Node.js-lek Node2Shell: welke versie je nodig hebt en wat je nu doet
Laatst bijgewerkt op
Woensdag 21 oktober 2026 ging bijna alle aandacht naar het PHP-lek waardoor DigiD en RTL offline gingen. Dezelfde dag bracht Node.js ook een beveiligingsupdate uit, voor tien lekken tegelijk. Eén daarvan, inmiddels Node2Shell genoemd, laat een aanvaller eigen code draaien op je server. Op 23 oktober riep het NCSC op om meteen te updaten (NCSC (opent in nieuw venster)).
Wat is Node.js en draai jij het?
Node.js is de software waarmee JavaScript op een server draait. Veel moderne websites en webapps werken ermee, bijvoorbeeld sites gebouwd met Next.js. Ook tools die je zelf host, zoals n8n voor automatiseringen, draaien op Node.js. Heb je een simpele WordPress-site? Dan draait die op PHP en speelt dit lek waarschijnlijk niet. Twijfel je, vraag het je webbouwer of IT-partner.
Wat er aan de hand is
Het lek zit in Brotli, een stukje software van Google dat bestanden inpakt en weer uitpakt. Webservers gebruiken het om pagina's kleiner te maken voordat ze naar de browser gaan (Security.NL (opent in nieuw venster)). Node.js heeft een eigen kopie van Brotli ingebouwd. Stuurt een aanvaller speciaal gemaakte ingepakte data, dan schrijft Node.js buiten het stuk geheugen dat ervoor bedoeld is. Zo kan hij het systeem laten vastlopen, gegevens uit het geheugen halen of zijn eigen code laten draaien. Inloggen is niet nodig (NCSC (opent in nieuw venster)).
Node.js noemt het lek zelf ernstig (high). Google, dat de CVE registreerde, gaf het een CVSS-score van 9,2 en noemt het kritiek (Convika (opent in nieuw venster)). Het Belgische CCB gaat ook uit van 9,2 (CCB (opent in nieuw venster)).
Overzicht: veilige versies en releasedatum
De update kwam uit op woensdag 21 oktober 2026, rond 12.40 uur Nederlandse tijd (Convika (opent in nieuw venster)). Dit zijn de versies met de fix (Node.js (opent in nieuw venster)):
Node.js 26: update naar 26.12.1 of nieuwer (de nieuwste release).
Node.js 24: update naar 24.22.1 of nieuwer (de huidige LTS-versie, voor de meeste bedrijven de juiste keuze).
Node.js 22: update naar 22.23.4 of nieuwer.
Node.js 25, 23, 20 en ouder: geen update. Deze versies krijgen geen ondersteuning meer en blijven kwetsbaar. Stap over op 24 of 26 (Aikido (opent in nieuw venster)).
Bun (een alternatief voor Node.js): update naar 1.4.4 of nieuwer (Aikido (opent in nieuw venster)).
Waarom een update van je pakketten niet genoeg is
Het lek zit in Node.js zelf. Een update van je npm-pakketten, zoals Express, verandert niets aan de versie van Node.js (Aikido (opent in nieuw venster)). Die moet op de server, in je Docker-image of bij je hostingpartij omhoog. Een Docker-image die vastzit op een oude versie, zoals node:24.22.0, blijft kwetsbaar tot je hem opnieuw bouwt (Convika (opent in nieuw venster)).
Wat je nu doet
Zoek uit waar Node.js draait. Denk aan je website of webapp, zelf gehoste tools en de servers van je ontwikkelaar. Vraag het je webbouwer of IT-partner als je het niet weet.
Controleer de versie. Op de server typ je node --version. Staat er een lager nummer dan in het overzicht hierboven, dan moet je updaten.
Draai je 20, 23 of 25? Plan de overstap. Test eerst of je applicatie werkt op versie 24 of 26.
Vergeet de rest niet. Bouw Docker-images opnieuw en update ook de build-servers die je code bouwen.
Houd het in de gaten. Op 23 oktober was nog geen misbruik bekend (NCSC (opent in nieuw venster)). Er is wel al voorbeeldcode verschenen die laat zien hoe de aanval werkt, dus wacht niet te lang (Aikido (opent in nieuw venster)).
Twee grote lekken op één dag laten zien dat je moet weten welke software er onder je website zit. Zet in je noodplan wie je website beheert, op welke software hij draait en wie de updates doet.
Download en print het noodplan cyberaanval
Een checklist van een paar pagina's die je één keer invult en daarna print. Met de eerste stappen, een lijst met contactpersonen en de meldtermijnen.
Naar het noodplan cyberaanvalWil je weten hoe je ervoor staat? Doe de gratis IT-check en kijk in de checklist leveranciers en cloud welke afspraken je met je hostingpartij en webbouwer maakt over updates.
Uitgebreide versie: de details
Voor wie meer wil weten: technische details, de schade en de bronnen.
Alle tien de lekken
De update van 21 oktober dicht tien lekken. Vier zijn ernstig (high), drie gemiddeld (medium) en drie laag (low). De meeste zitten in alle drie de ondersteunde versies (Node.js (opent in nieuw venster)).
Ernstig (high)
CVE-2026-111497: Node2Shell. Brotli schrijft buiten het geheugen en dat maakt code uitvoeren op afstand mogelijk. Geldt voor 22, 24 en 26.
CVE-2026-105482: dns.resolve*() en dns.reverse() knippen namen af op een NUL-teken. Geldt voor 22, 24 en 26.
CVE-2026-105483: de controle van de hostnaam bij TLS is te omzeilen met een IP-adres in brede (fullwidth) cijfers. Geldt voor 24 en 26.
CVE-2026-106069: de controle van de hostnaam bij TLS is te omzeilen met een IPv4-adres met voorloopnullen. Geldt voor 22, 24 en 26.
Gemiddeld (medium)
CVE-2026-105481: een keep-alive-verbinding accepteert een antwoord dat binnenkomt voordat het verzoek is verstuurd.
CVE-2026-106072: IPv4-hostnamen in een afwijkende schrijfwijze laten een certificaat voor een domeinnaam ook gelden voor een IP-adres.
CVE-2026-106074: randomUUID() en randomInt() kunnen in verschillende processen dezelfde waarden geven als hun cache in een snapshot of SEA is opgeslagen.
Laag (low)
CVE-2026-106070: zlib.ZipFile geeft data van de aanvaller terug na een mislukte controle van de header. Alleen 26.
CVE-2026-106071: een wildcard in het Permission Model geeft meer toegang tot bestanden dan bedoeld. Alleen 26.
CVE-2026-106073: het Permission Model is te omzeilen via fs.realpathSync(). Geldt voor 22, 24 en 26.
Verder kregen c-ares, Undici en de lijst met vertrouwde certificaten een update, omdat een tussencertificaat van eMudhra in verkeerde handen was gekomen. Versies 22 en 24 kregen ook een nieuwe OpenSSL, en versie 22 een nieuwe SQLite (Node.js (opent in nieuw venster)).
Hoe Node2Shell werkt
De aanval komt binnen via ingepakte Brotli-data. Volgens Aikido en Cyber Kendra kan dat op twee manieren (Aikido (opent in nieuw venster), Cyber Kendra (opent in nieuw venster)).
Je applicatie haalt met de ingebouwde fetch() iets op bij een server van iemand anders. fetch() pakt Brotli-antwoorden zelf uit. Een kwaadwillende server kan zo de aanval terugsturen. Denk aan webhooks of adressen die een gebruiker zelf invult.
Je server neemt verzoeken aan met Content-Encoding: br en pakt die uit. Express 5.0.0 tot en met 5.3.0 en body-parser 2.0.0 tot en met 2.3.0 doen dat vanzelf.
Een kale Node.js-webserver zonder zulke middleware pakt binnenkomende Brotli-data niet uit (Cyber Kendra (opent in nieuw venster)). Toch is de update nodig, want via fetch() blijft de route open.
Tijdelijke maatregel
Node.js geeft zelf geen tijdelijke oplossing. Je kunt op een reverse proxy of load balancer verzoeken met Content-Encoding: br weigeren. Dat helpt alleen tegen aanvallen op je server. Antwoorden die je applicatie zelf ophaalt met fetch() blijven een risico, dus updaten blijft de echte oplossing (Aikido (opent in nieuw venster)).
Ook buiten Node.js
Het lek zit in de Brotli-bibliotheek van Google, versies 1.0.3 tot en met 1.2.0. De fix zit in Brotli 1.0.10, 1.1.1 en 1.2.1. Het Python-pakket Brotli is gerepareerd in 1.2.1 en Bun in 1.4.4 (Cyber Kendra (opent in nieuw venster)). Debian-pakketten van Node.js gebruiken de Brotli van het systeem. Daar moet dus het pakket brotli bijgewerkt worden. Op 23 oktober had Debian daar nog geen versie met de fix voor (Convika (opent in nieuw venster)).
Werd het lek al misbruikt?
Het NCSC schat de kans op misbruik gemiddeld in en de mogelijke schade groot. Bewijs van misbruik was er op 23 oktober niet (NCSC (opent in nieuw venster)). De Amerikaanse CISA had het lek toen ook nog niet op zijn lijst van misbruikte lekken staan (Cyber Kendra (opent in nieuw venster)). Wel liet beveiligingsbedrijf Imperva op 22 oktober zien dat de aanval werkt. Het draaide eigen code op de officiële Docker-image van Node.js 24.22.0. Daar waren wel meerdere pogingen voor nodig. Versie 24.22.1 hield dezelfde aanval tegen (Cyber Kendra (opent in nieuw venster)).
Tijdlijn
27 februari 2026: de fix voor Brotli staat al in de code van Google. Niemand ziet het toen als beveiligingsprobleem en er komt geen nieuwe versie van Brotli (Cyber Kendra (opent in nieuw venster)).
21 oktober: Node.js brengt rond 10.38 uur UTC versies 22.23.4, 24.22.1 en 26.12.1 uit (Convika (opent in nieuw venster)).
22 oktober: Imperva publiceert een werkende aanval en noemt het lek Node2Shell. Google zet de CVE online met een score van 9,2 (Cyber Kendra (opent in nieuw venster), Convika (opent in nieuw venster)).
23 oktober: het NCSC publiceert om 11.55 uur een advisory en later een oproep om te updaten (NCSC (opent in nieuw venster), NCSC (opent in nieuw venster)). OpenAI laat weten dat zijn red team de fout vond (Cyber Kendra (opent in nieuw venster)).
Volgens de advisory van Node.js meldde Matteo Collina het probleem en schreef Antoine du Hamel de fix (Cyber Kendra (opent in nieuw venster)).