Gemiddeld · 4.8 Node.js & npm GHSA-2jfj-6hjv-fm6j CVE-2026-84933 GHSA-3wwx-pv8p-q78v CVE-2026-85024
undici: vijf kwetsbaarheden maken cookiediefstal en meerdere denial-of-service-aanvallen mogelijk
Vijf afzonderlijke kwetsbaarheden in undici, de HTTP/WebSocket-client voor Node.js, maken het mogelijk cookies tussen gebruikers te lekken via gedeelde caching en op meerdere manieren een Node.js-proces te laten crashen door kwaadwillende of gecompromitteerde servers. Alle problemen zijn verholpen in undici 7.29.1 en 8.10.2.
AI-samenvatting
In de GitHub advisory-database zijn vijf kwetsbaarheden gepubliceerd die undici treffen, de HTTP/1.1-client waarop de ingebouwde fetch- en WebSocket-implementaties van Node.js zijn gebaseerd. Eén probleem zorgt ervoor dat een gedeelde HTTP-cache cookies van de ene gebruiker kan lekken naar een andere gebruiker. De overige vier zijn denial-of-service-problemen waarmee een kwaadwillende of gecompromitteerde externe server het Node.js-proces waarin de client draait kan laten crashen. Alle vijf zijn verholpen in undici 7.29.1 en 8.10.2; één fix is ook beschikbaar in 6.28.1.
Wat is er gebeurd
Er zijn vijf kwetsbaarheden in undici gepubliceerd: 1. CVE-2026-84933 (GHSA-2jfj-6hjv-fm6j): de functie `interceptors.cache()` verwijdert `Set-Cookie`-headers niet voordat een cachebare respons wordt opgeslagen in gedeelde-cachemodus. Een cookie die voor de ene gebruiker is gezet, kan later vanuit de cache worden teruggestuurd naar een andere gebruiker die dezelfde cachesleutel gebruikt. 2. CVE-2026-85024 (GHSA-3wwx-pv8p-q78v): bij het decomprimeren van permessage-deflate-berichten in de WebSocket-client wordt de interne foutlistener verwijderd zodra een groottelimiet wordt overschreden, terwijl de decompressiestream blijft doorlopen. Een daaropvolgende decompressiefout leidt dan tot een onafgehandelde error-gebeurtenis die het Node.js-proces laat crashen. 3. CVE-2026-84890 (GHSA-3xpg-4rpp-hhhm): de functie `interceptors.decompress()` beperkt het aantal decompressielagen, maar niet de totale omvang van de gedecomprimeerde uitvoer, waardoor een compressiebom het geheugen van het proces kan uitputten. 4. CVE-2026-18149 (GHSA-pmjh-fq2x-6v4x): `RetryHandler` kan een responsbody onbepaalde tijd laten hangen wanneer na een afgebroken verzoek een niet-herhaalbare respons volgt, waardoor leesbewerkingen op die body blijven hangen en `bodyTimeout` niet wordt geactiveerd. 5. CVE-2026-85014 (GHSA-rx4f-c7p8-82vq): `WebSocketStream` roept `abort()` aan op een vergrendelde schrijfbare stream bij een abrupt afgesloten verbinding; de resulterende promise-afwijzing wordt niet afgehandeld, wat een onafgehandelde rejection veroorzaakt die het proces beëindigt.
Technische oorzaak
Het cookielek komt voort uit het feit dat de cache-interceptor niet voldoet aan de eis uit RFC 6265 sectie 7.2 dat een gedeelde cache geen `Set-Cookie`-headers mag opslaan. De vier denial-of-service-problemen vertonen een vergelijkbaar patroon: interne foutafhandeling van streams of promises ontbreekt, waardoor fouten die binnen undici zelf opgevangen zouden moeten worden, in plaats daarvan als onafgehandelde `error`- of `unhandledRejection`-gebeurtenissen naar buiten komen. Node.js behandelt dit soort gebeurtenissen standaard als fataal. Bij de decompressiebom ligt de oorzaak niet bij onafgehandelde fouten, maar bij het ontbreken van een limiet op het resourcegebruik.
Waarom dit belangrijk is
undici wordt standaard meegeleverd met Node.js en wordt direct of indirect gebruikt door een zeer groot aantal server-side JavaScript-toepassingen, waardoor deze problemen een grote reikwijdte hebben. Het cookielek (CVSS 6.5) kan sessie- of authenticatiecookies van de ene gebruiker blootstellen aan een andere gebruiker wanneer een toepassing de gedeelde cache van undici gebruikt tegen een niet-vertrouwde of multi-user upstream. De vier denial-of-service-problemen (elk CVSS 5.9) maken het mogelijk dat één kwaadwillende of gecompromitteerde externe server het volledige Node.js-proces laat crashen — in meerdere gevallen met slechts één verbinding of verzoek, en bij het WebSocket-decompressieprobleem kan de aanval bij elke herverbinding worden herhaald, wat tot een crashlus kan leiden.
Wie wordt getroffen
Toepassingen die undici als HTTP-client gebruiken, of die gebruikmaken van de ingebouwde `globalThis.WebSocket` van Node.js (die op undici is gebaseerd), kunnen afhankelijk van de gebruikte functionaliteit getroffen zijn: - Cookielek via gedeelde cache: toepassingen die `interceptors.cache()` gebruiken met `type: 'shared'` (de standaardinstelling) tegen niet-vertrouwde of multi-user upstreams. Private caches (`type: 'private'`) zijn niet getroffen. - Crash via permessage-deflate: toepassingen die de WebSocket-client van undici of de ingebouwde WebSocket van Node.js gebruiken en verbinding kunnen maken met een door een aanvaller gecontroleerd of gecompromitteerd WebSocket-eindpunt. - Decompressiebom: toepassingen die `interceptors.decompress()` gebruiken tegen niet-vertrouwde of onbetrouwbare upstreams. - RetryHandler-DoS: toepassingen die `RetryHandler` gebruiken tegen een server die afgebroken en vervolgens niet-herhaalbare responses kan sturen. - WebSocketStream-crash: toepassingen die de `WebSocketStream`-API gebruiken en via een writer schrijven, de standaardmanier om naar deze API te schrijven.
Getroffen versies
De getroffen versiereeksen verschillen per kwetsbaarheid: - CVE-2026-84933 (cookielek): undici >= 7.0.0, < 7.29.1 en >= 8.0.0, < 8.10.2. - CVE-2026-85024 (permessage-deflate-crash): undici >= 6.25.0, < 6.28.1; >= 7.28.0, < 7.29.1; en >= 8.1.0, < 8.10.2. - CVE-2026-84890 (decompressiebom): undici >= 7.15.0, < 7.29.1 en >= 8.0.0, < 8.10.2. - CVE-2026-18149 (RetryHandler-DoS): undici >= 7.11.0, < 7.29.1 en >= 8.0.0, < 8.10.2. - CVE-2026-85014 (WebSocketStream-crash): alle releases vanaf undici 7.0.0 tot (maar niet met) 7.29.1, en >= 8.0.0, < 8.10.2 (WebSocketStream is geïntroduceerd in 7.0.0).
Fixes en mitigatie
Alle vijf problemen zijn verholpen in undici 7.29.1 en 8.10.2. De permessage-deflate-crash (CVE-2026-85024) is bovendien verholpen in 6.28.1 voor toepassingen op de 6.x-lijn. Mitigaties per probleem wanneer nog niet geüpgraded kan worden: - Cookielek: gebruik een private cache (`type: 'private'`) voor responses die per gebruiker verschillen, cache geen responses die cookies zetten, of verwijder `Set-Cookie` uit responses voordat ze worden gecachet. - Decompressiebom: vermijd `interceptors.decompress()` tegen niet-vertrouwde upstreams, of pas een eigen interceptor toe die een limiet op de gedecomprimeerde grootte afdwingt; stel na het upgraden een voorzichtige `maxSize`-optie in op de interceptor (standaard 64 MiB). - RetryHandler-DoS: hanteer een onafhankelijke deadline voor het verzoek en vernietig de responsbody wanneer deze verstrijkt, aangezien `bodyTimeout` alleen dit niet voorkomt. - Permessage-deflate-crash en WebSocketStream-crash: er is geen workaround beschikbaar anders dan upgraden.
Aanbevolen actie
Upgrade undici naar 8.10.2, of naar 7.29.1 als u op de 7.x-lijn blijft. Toepassingen die nog op de 6.x-lijn draaien, moeten minimaal upgraden naar 6.28.1 om de permessage-deflate-crash te verhelpen; let op dat de overige vier problemen volgens de beschikbare informatie niet als verholpen op de 6.x-lijn worden vermeld. Controleer het gebruik van `interceptors.cache()`, `interceptors.decompress()`, `RetryHandler` en de WebSocket/WebSocketStream-API's om te bepalen of de bijbehorende tijdelijke mitigaties nodig zijn totdat is geüpgraded.
PatchBriefing-score
4.8 / 10 · Gemiddeld
Officiële CVSS: 6.5
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:N
Waarom deze score
Het cookielek (CVE-2026-84933) heeft een CVSS-basisscore van 6,5, bepaald door een vertrouwelijkheidsimpact (cookies van de ene gebruiker worden blootgesteld aan een andere), gecombineerd met hoge aanvalscomplexiteit, geen vereiste rechten of gebruikersinteractie, en een netwerk-aanvalsvector. De vier denial-of-service-problemen hebben elk een CVSS-basisscore van 5,9, wat een hoge impact op beschikbaarheid weerspiegelt (procescrash), hoge aanvalscomplexiteit, netwerkvector en geen vereiste rechten of gebruikersinteractie. Geen van de vijf problemen wordt vermeld als actief misbruikt, heeft een publiek exploit, of heeft een toegewezen EPSS-score (twee items bevatten EPSS-percentages onder de 0,5%, wat duidt op een lage waargenomen kans op misbruik). Voor alle problemen zijn fixes beschikbaar, wat is meegewogen in de PatchBriefing-scores (4,5–4,8) van elk advies.
Getroffen versies
- undici >= 8.0.0, < 8.10.2
- kwetsbaar
- ≥ 7.29.1
- gepatcht
- ≥ 8.10.2
- gepatcht
- undici >= 8.1.0, < 8.10.2
- kwetsbaar
- ≥ 6.28.1
- gepatcht
- ≥ 7.29.1
- gepatcht
- ≥ 8.10.2
- gepatcht
- undici >= 8.0.0, < 8.10.2
- kwetsbaar
- ≥ 7.29.1
- gepatcht
- ≥ 8.10.2
- gepatcht
- undici >= 8.0.0, < 8.10.2
- kwetsbaar
- ≥ 7.29.1
- gepatcht
- ≥ 8.10.2
- gepatcht
- undici >= 8.0.0, < 8.10.2
- kwetsbaar
- ≥ 7.29.1
- gepatcht
- ≥ 8.10.2
- gepatcht
Gemelde oplossingen
Alle vijf problemen zijn verholpen in undici 7.29.1 en 8.10.2. De permessage-deflate-crash (CVE-2026-85024) is bovendien verholpen in 6.28.1 voor toepassingen op de 6.x-lijn. Mitigaties per probleem wanneer nog niet geüpgraded kan worden: - Cookielek: gebruik een private cache (`type: 'private'`) voor responses die per gebruiker verschillen, cache geen responses die cookies zetten, of verwijder `Set-Cookie` uit responses voordat ze worden gecachet. - Decompressiebom: vermijd `interceptors.decompress()` tegen niet-vertrouwde upstreams, of pas een eigen interceptor toe die een limiet op de gedecomprimeerde grootte afdwingt; stel na het upgraden een voorzichtige `maxSize`-optie in op de interceptor (standaard 64 MiB). - RetryHandler-DoS: hanteer een onafhankelijke deadline voor het verzoek en vernietig de responsbody wanneer deze verstrijkt, aangezien `bodyTimeout` alleen dit niet voorkomt. - Permessage-deflate-crash en WebSocketStream-crash: er is geen workaround beschikbaar anders dan upgraden.
Hoe dit rapport is gemaakt
5 bronrecords zijn opgehaald, gekoppeld en gebruikt om het rapport hierboven op te stellen.
-
GitHub Advisory Database database
-
GitHub Advisory Database database
-
GitHub Advisory Database database
-
GitHub Advisory Database database
-
GitHub Advisory Database database
Revisiegeschiedenis
- Gepubliceerd
- Gegenereerd
Gerelateerd
Relevante veranderingen voor de stacks die je volgt.
Kies je stacks, onderwerpen en eventueel WordPress-plugins. Om 07:00 CEST worden passende meldingen en releases uit de rapportageperiode in één e-mail gegroepeerd.
✓ Kies stacks en onderwerpen✓ Pas voorkeuren altijd aan✓ Eén gebundelde e-mail