Eén enkele bug in Google's Brotli-compressiebibliotheek — geregistreerd als CVE-2026-111497 en bijgenaamd Node2Shell, Brotli2Shell en HTTP2Shell — stelt een aanvaller in staat om geheugen te corrumperen in elk programma dat door de aanvaller gecontroleerde Brotli-gegevens decomprimeert, met mogelijk remote code execution als gevolg. Omdat Brotli is ingebed in Node.js, .NET, Python, Bun en een lange lijst andere software, veranderde één upstream-fout eind oktober 2026 in een patch-race door de hele stack. Als je dienst een Content-Encoding: br request body accepteert of Brotli decodeert uit welke onvertrouwde bron dan ook, moet je patchen.
Dit is niet zomaar weer een CVE voor één product. De Brotli-kwetsbaarheid zit in de gedeelde C-decoder die tientallen runtimes meeleveren, dus de interessante vraag is niet "is Node.js getroffen?" (dat is zo) maar "welke van de dingen die ik draai linken stiekem dezelfde bibliotheek?" Dit artikel brengt de volledige impactstraal in kaart en geeft je in één tabel de gepatchte versie voor elk ecosysteem.
Wat is CVE-2026-111497?
CVE-2026-111497 is een out-of-bounds write in de Brotli-decoder. Volgens de security release-notes van Node.js bleef de streaming-decoder input-bytes toevoegen aan een interne buffer van acht bytes zonder bounds-checking, waardoor speciaal geprepareerde met Brotli gecomprimeerde gegevens die buffer laten overlopen en het procesgeheugen corrumperen. De praktische gevolgen zijn een crash, het lekken van procesgeheugen, of in het ergste geval remote code execution. Google gaf de fout een score van 9.2 onder CVSS v4.0, terwijl het Singaporese Cyber Security Agency een CVSS v3.1-score van 9.8 noemde — hoe dan ook: kritiek. De enige voorwaarde is dat een kwetsbare applicatie Brotli-gegevens decomprimeert waar een aanvaller invloed op heeft, en dat is een zeer gangbaar patroon: Brotli (br) is een standaard HTTP-content-encoding die door elke gangbare browser en CDN wordt ondersteund.
Waarom één bug zo veel producten treft
Brotli werd uitgebracht als een kleine, snelle C-bibliotheek die applicatie-runtimes rechtstreeks meeleveren in plaats van op OS-niveau als dependency te gebruiken. Dat ontwerp is de reden dat de fix door elk project opnieuw moest worden uitgebracht in plaats van één keer gepatcht. Securityleverancier Field Effect merkt op dat de fout meerdere ecosystemen raakt tegelijk, en de advisory van Tenable somt een impactstraal op die Python, Bun, .NET, Java's brotli4j, de Envoy-proxy en de Istio-service-mesh omvat, plus data-tooling zoals FFmpeg, Apache Arrow en ClickHouse. Dit is dezelfde "één fout, veel stacks"-vorm die we behandelden bij de HTTP/2-bom die nginx, Apache en IIS liet crashen: een gedeelde bouwsteen die iedereen vertrouwde, die overal tegelijk faalt. Het rijmt ook op het dependency-risico achter de npm supply-chain-crisis van 2026 — de code die je nooit hebt gekozen om te installeren, is nog steeds jouw aanvalsoppervlak.
Patchmatrix: gepatchte versies per ecosysteem
Werk bij naar de onderstaande versies. Als je containers of CI-images draait, bouw ze opnieuw op — een gepatchte base image is de snelste manier om meegeleverde runtimes in één keer te repareren.
| Ecosysteem | Gepatchte versie(s) | Opmerkingen |
|---|---|---|
| Google Brotli (C-bibliotheek) | 1.0.10, 1.1.1, 1.2.1 | De upstream-bron van de bug; al het andere herverpakt dit |
| Node.js | 22.23.4, 24.22.1, 26.12.1 | Gefixt via node:zlib in de release van 21 oktober; 20.x is EOL en wordt niet gepatcht |
| .NET | 8.0.33, 9.0.22, 10.0.14 | Pas de runtime-update van oktober toe |
| Python (brotli / brotlicffi) | 1.2.1 / 1.2.1.0 | Komt vaak voor in HTTP-clients die br-encoding onderhandelen |
| Bun | 1.4.4 | Levert zijn eigen Brotli-decoder mee |
| brotli4j, Envoy, Istio, FFmpeg, Apache Arrow, ClickHouse, PHP voor Windows | Per advisory van de leverancier | Alle linken dezelfde decoder — controleer de release-notes van elk project |
Ben ik daadwerkelijk kwetsbaar?
Een kwetsbare runtime installeren is niet hetzelfde als exploiteerbaar zijn. De blootstellingstoets is eenvoudig: decomprimeert je code ooit Brotli-gegevens die een aanvaller kan aanleveren? Stel jezelf deze drie vragen, in volgorde:
- Accepteer je Brotli-request-bodies? Een API of proxy die
Content-Encoding: brop inkomende requests honoreert, is het klassieke blootgestelde pad — de aanvaller controleert de gecomprimeerde bytes rechtstreeks. - Haal je remote content op en decomprimeer je die? Server-side HTTP-clients, webhook-consumers en scrapers die de server
br-gecodeerde responses laten sturen, zijn kwetsbaar als het andere uiteinde onvertrouwd is. - Decomprimeer je door gebruikers geüploade of opgeslagen bestanden via een Brotli-pad? Build-pipelines, documentprocessors en data-tools (Arrow, ClickHouse, FFmpeg) die
.br-streams inlezen tellen mee.
Als het antwoord op alle drie nee is — je comprimeert bijvoorbeeld alleen ooit uitgaande responses en decodeert nooit onvertrouwde Brotli — dan is je praktische risico lager, maar patch toch. De analyse van Rapid7 benadrukt dat decoder-paden indirect gemakkelijk te bereiken zijn via bibliotheken waarvan je niet doorhad dat ze br onderhandelen, dus "ik denk niet dat ik Brotli gebruik" is geen veilige aanname.
Tijdlijn: een gat van acht maanden
Het meest ongemakkelijke detail is de vertraging. De fix werd op 27 februari 2026 gecommit naar de upstream Brotli-repository, maar de gepatchte bibliotheek-releases werden pas op 21 oktober 2026 uitgebracht — ruwweg acht maanden waarin de patch in de publieke broncode-historie stond terwijl de uitgebrachte binaries kwetsbaar bleven. Datadog Security Labs reproduceerde de bug als Node2Shell, en tegen de tijd dat de gecoördineerde disclosure op 30 oktober plaatsvond, was er een proof-of-concept openbaar en werd de fout naar verluidt actief uitgebuit. Een publieke upstream-commit is een routekaart voor aanvallers; het venster tussen "gefixt in de broncode" en "uitgeleverd aan gebruikers" is precies waar deze gevaarlijk werd. Het is dezelfde les over patch-latency achter ons stuk over de ergste patchweek van 2026.
Wat je nu moet doen
Behandel dit als een klus voor dezelfde dag op elke dienst die aan het internet hangt. Patch runtimes naar de versies in de tabel, bouw container-images opnieuw op en rol ze opnieuw uit zodat meegeleverde kopieën worden ververst, en herstart workloads — een proces in het geheugen blijft de oude, kwetsbare decoder draaien totdat het herstart. Controleer na het patchen de toegangs- en requestlogs op de hierboven genoemde blootgestelde paden; exploits van geheugencorruptie laten vaak crash-loops of abnormale herstarts achter voordat ze slagen. Als je je eigen infrastructuur beheert, behandelt onze checklist voor een veilig eerste uur op een VPS de logging- en update-hygiëne die de volgende van deze soort een routinematige patch maken in plaats van een brandoefening.
Veelgestelde vragen
Wordt CVE-2026-111497 uitgebuit?
Een proof-of-concept is openbaar beschikbaar en de kwetsbaarheid wordt naar verluidt actief uitgebuit sinds eind oktober 2026. In combinatie met de kritieke ernst en de enorme installbase valt dit nadrukkelijk in de categorie "nu patchen".
Welke Node.js-versies zijn gefixt?
Node.js 22.23.4, 24.22.1 en 26.12.1, uitgebracht op 21 oktober 2026. Node.js 20.x bereikte op 30 april 2026 het einde van zijn levensduur en krijgt geen fix — stap ervan af.
Ik comprimeer alleen responses, ik decomprimeer nooit Brotli. Ben ik veilig?
Je directe risico is lager omdat de bug in de decoder zit, niet in de encoder. Maar bibliotheken en HTTP-clients kunnen br onderhandelen en decoderen zonder dat je het merkt, dus patch hoe dan ook in plaats van op die aanname te vertrouwen.
Lost het patchen van het OS het op?
Meestal niet op zichzelf. De meeste getroffen software levert zijn eigen kopie van Brotli mee, dus je moet elke runtime bijwerken (Node.js, .NET, Bun, Python-packages) en container-images opnieuw opbouwen — een update van alleen een OS-package ververst geen meegeleverde bibliotheek.
Sources
- Node.js — October 2026 Security Releases: officiële gepatchte versies (22.23.4, 24.22.1, 26.12.1), het out-of-bounds-write-mechanisme en de release met 10 CVE's.
- Tenable — Brotli2Shell FAQ (CVE-2026-111497): CVSS v4.0-score van 9.2, getroffen ecosystemen en de gepatchte versies van Brotli/Python/Bun/.NET.
- Datadog Security Labs — Node2Shell: technische reproductie en de fix-tijdlijn van februari tot oktober 2026.
- Rapid7 — Critical out-of-bounds write in the Node.js Brotli decoder: blootstellingsanalyse en waarom decoder-paden indirect gemakkelijk te bereiken zijn.
- CSA Singapore — Active Exploitation of Critical Brotli Vulnerability: CVSS v3.1-score van 9.8, status van actieve exploitatie en PoC, getroffen producten.
- Field Effect — Brotli vulnerability affects multiple software ecosystems: de ecosysteem-overstijgende impactstraal.
Waqas Ahmed Waseer
Waqas Ahmed Waseer is ontwikkelaar en automation-builder met meer dan 8 jaar ervaring in het bouwen van productiesystemen die door 100.000+ mensen worden gebruikt. Hij bouwt custom multi-tenant SaaS, AI-automatisering (n8n, LLM-workflows, WhatsApp-bots) en hostinginfrastructuur (WHM/cPanel, CloudLinux) — en is de maker van WaSphere, FlowMaticX en het hostingmerk WaseerHost. 100+ projecten opgeleverd voor mkb, bureaus en gefinancierde startups.
