Kritieke kwetsbaarheid in Node.js kan servercrashes veroorzaken via async_hooks Stack Overflow

Node.js heeft updates uitgebracht om een ​​kritiek beveiligingsprobleem op te lossen dat van invloed is op “vrijwel elke Node.js-productie-app” en dat, indien succesvol uitgebuit, een denial-of-service (DoS)-toestand zou kunnen veroorzaken.

“Node.js/V8 doet zijn uiterste best om te herstellen van de uitputting van de stapelruimte met een opspoorbare fout, waar frameworks op zijn gaan vertrouwen voor de beschikbaarheid van diensten”, zeiden Matteo Collina en Joyee Cheung van Node.js in een bulletin van dinsdag.

“Een bug die zich alleen reproduceert wanneer async_hooks worden gebruikt, zou deze poging verbreken, waardoor Node.js direct met 7 afsluit zonder een haalbare fout te genereren wanneer recursies in gebruikerscode de stapelruimte uitputten. Dit maakt applicaties waarvan de recursiediepte wordt bepaald door niet-opgeschoonde invoer kwetsbaar voor denial-of-service-aanvallen.”

In de kern komt de tekortkoming voort uit het feit dat Node.js afsluit met code 7 (wat duidt op een runtimefout van de interne uitzonderingshandler) in plaats van de uitzondering netjes af te handelen wanneer er een stapeloverloop optreedt in de gebruikerscode terwijl async_hooks is ingeschakeld. Async_hooks is een Node.js API op laag niveau waarmee ontwikkelaars de levenscyclus van asynchrone bronnen kunnen volgen, zoals databasequery’s, timers of HTTP-verzoeken.

Het probleem, aldus Node.js, heeft gevolgen voor verschillende frameworks en Application Performance Monitoring (APM)-tools, waaronder React Server Components, Next.js, Datadog, New Relic, Dynatrace, Elastic APM en OpenTelemetry, vanwege het gebruik van AsyncLocalStorage, een component gebouwd bovenop de async_hooks-module die het mogelijk maakt om gegevens op te slaan gedurende de levensduur van een asynchrone operatie.

Het is aangepakt in de volgende versies –

  • Node.js 20.20.0 (LTS)
  • Node.js 22.22.0 (LTS)
  • Node.js 24.13.0 (LTS)
  • Node.js 25.3.0 (huidig)

Het probleem heeft ook gevolgen voor alle Node.js-versies, van 8.x, de eerste versie met async_hooks, tot 18.x. Het is vermeldenswaard dat Node.js versie 8.0.0, met de codenaam Carbon, op 30 mei 2017 is uitgebracht. Deze versies blijven echter ongepatcht omdat ze de end-of-life (EoL)-status hebben bereikt.

De aangebrachte oplossing detecteert stack-overflow-fouten en gooit deze opnieuw naar de gebruikerscode in plaats van ze als fataal te behandelen. Dit wordt bijgehouden onder de CVE-identifier CVE-2025-59466 (CVSS-score: 7,5). Ondanks de aanzienlijke praktische impact zegt Node.js dat het de oplossing slechts als een oplossing beschouwt vanwege een aantal redenen:

“Hoewel het een bugfix is ​​voor niet-gespecificeerd gedrag, hebben we ervoor gekozen om het in de beveiligingsrelease op te nemen vanwege de wijdverbreide impact op het ecosysteem”, aldus Node.js. “React Server Componenten, Next.js en vrijwel elke APM-tool worden getroffen. De oplossing verbetert de ontwikkelaarservaring en maakt foutafhandeling voorspelbaarder.”

In het licht van de ernst van de kwetsbaarheid wordt gebruikers van de frameworks/tools en serverhostingproviders aangeraden zo snel mogelijk te updaten. Beheerders van bibliotheken en raamwerken wordt aanbevolen om robuustere verdedigingen toe te passen om uitputting van de stapelruimte tegen te gaan en de beschikbaarheid van diensten te garanderen.

De onthulling komt omdat Node.js ook oplossingen heeft uitgebracht voor drie andere zeer ernstige fouten (CVE-2025-55131, CVE-2025-55130 en CVE-2025-59465) die kunnen worden misbruikt om respectievelijk datalekken of corruptie te bewerkstelligen, gevoelige bestanden te lezen met behulp van vervaardigde relatieve symbolische linkpaden (symlink) en een denial-of-service op afstand te activeren.

Thijs Van der Does