Brotli-lek Broccoli2Shell: patch Node.js, .NET en Python
Google heeft een kwetsbaarheid verholpen in de Brotli-decoder, de C-bibliotheek die meeleest waar software gecomprimeerde data uitpakt. Het lek staat geregistreerd als CVE-2026-111497 en circuleert onder drie namen: Node2Shell, HTTP2Shell en Broccoli2Shell. GitHub beoordeelt het met 9,2 op de CVSS 4.0-schaal, het Node.js-project houdt het op "high".
Wat er misgaat
Een Brotli-stroom bestaat uit blokken en de decoder wisselt onderweg van bloktype. De functie die zo'n wissel afhandelde gaf alleen een boolean terug, waardoor de aanroeper een misvormde stroom niet kon onderscheiden van een stroom die nog niet compleet was.
Volgens het advisory van het Node.js-project werd een ongeldige blokwissel daarom gemeld als een tijdelijke behoefte aan meer invoer, in plaats van als definitieve formaatfout. De decoder bleef bytes aanplakken in een interne buffer van acht bytes en schreef daar voorbij. Dat kan een crash opleveren, het uitlezen van procesgeheugen, of het uitvoeren van code.
Het NCSC publiceerde op 23 oktober advisory NCSC-2026-0453 en schat de kans op misbruik in als medium, de schade als high. "Een ongeauthenticeerde kwaadwillende kan de kwetsbaarheid op afstand misbruiken door speciaal vervaardigde Brotli-gecomprimeerde gegevens te laten verwerken", schrijft het centrum.
Verder dan Node.js
De bug zit in Googles referentie-decoder, niet in Node.js zelf. Alles wat Brotli 1.0.3 tot en met 1.2.0 meelevert of eraan linkt kan geraakt zijn. Node.js bundelt een eigen kopie: daar bepaalt alleen de Node-versie of je kwetsbaar bent.
Het pijnlijke punt is dat je zelf niets met Brotli hoeft te doen om blootgesteld te zijn. HTTP-clients pakken Brotli-antwoorden namelijk uit eigen beweging uit. De fetch() van Node decodeert Content-Encoding: br automatisch, en Pythons requests, urllib3, aiohttp en httpx doen dat zodra er een Brotli-pakket geïnstalleerd staat. Elke server die je aanspreekt kan dus een payload terugsturen: via webhooks, linkpreviews, crawlers of een importeer-uit-URL-functie.
Aan de ontvangende kant pakken Express 5.0.0 tot 5.3.0 en body-parser 2.0.0 tot 2.3.0 Brotli-request-bodies uit. Die twee bevatten de bug niet, ze zijn alleen het pad ernaartoe; bijwerken helpt daar dus niet.
Microsoft bracht zondag buiten de reguliere patchronde updates uit voor .NET. Applicaties zijn geraakt als ze Brotli-data verwerken via ASP.NET Core request decompression, automatische response-decompressie in HttpClient, of de Brotli-API's in System.IO.Compression. Geen van die paden staat standaard aan. .NET Framework is niet geraakt.
Wat je nu kunt doen
- Werk Node.js bij naar 22.23.4, 24.22.1 of 26.12.1. Node.js 25, 23, 20 en ouder krijgen geen fix; die reeksen zijn end-of-life.
- Werk .NET bij naar 8.0.33, 9.0.22 of 10.0.14. Voor .NET 11 staat Release Candidate 3 klaar.
- Zet de Python-pakketten Brotli op 1.2.1 en brotlicffi op 1.2.1.0. Komen je bindings uit je distributie, bijvoorbeeld
python3-brotli, dan loopt de fix via de distributie-updates. - Updaten alleen is niet genoeg. Een draaiend proces houdt de oude decoder vast tot het herstart, en een container tot je het image op een gepatchte basis herbouwt en opnieuw uitrolt.
- Kun je niet direct patchen, blokkeer dan inkomende Brotli-verzoeken op je proxy of firewall. De route via een Brotli-antwoord blijft daarmee wel open.
- Vertrouw niet blind op je scanner. Bij de disclosure vlagden pip-audit, Dependabot en Safety de getroffen PyPI-versies niet betrouwbaar, omdat het CVE-record naar Googles repository verwees. GitHub noemt de twee pakketten nu wel, als PYSEC-2026-4322 en PYSEC-2026-4323.
Hoe reëel is misbruik
Sinds 22 oktober staan er publieke proof-of-concepts online. Die bereiken volgens het informatieportaal broccoli2shell.com alleen code-uitvoering op een opzettelijk verzwakte build; op standaardbuilds blijft het bij een crash en een beperkte geheugenuitlezing. Het Red Team van Imperva kreeg code wel werkend op een ongewijzigd Node.js 24.22.0-image, maar gaf zijn exploit niet vrij. Misbruik in het wild is nog niet gemeld, meldt BleepingComputer.