
Onderzoekers tonen aan dat kwaadaardige Brotli data code-uitvoering mogelijk maakt in officiële Node.js builds, update dringend aanbevolen.
Onderzoekers van Imperva hebben aangetoond dat kwaadaardige Brotli-gecomprimeerde data kan leiden tot het uitvoeren van door een aanvaller aangeleverde code in een officiële Node.js build. Hun proof of concept draaide code op de officiële Node.js 24.22.0 image voor Linux arm64, zonder debugger of aangepaste build, door speciaal vervaardigde data aan de ingebouwde Brotli decoder te voeren (CVE-2026-111497).
Node.js heeft de kwetsbaarheid bekendgemaakt en op 21 oktober patches uitgebracht. Applicaties die onbetrouwbare Brotli data decoderen, dienen deze update te installeren. Imperva meldde dat code-uitvoering niet bij elke poging lukte en dat meerdere pogingen nodig waren in hun Linux arm64 testomgeving. De test betrof één specifieke build en setup; andere architecturen en versies 22.x en 26.x zijn niet getest. In de gepatchte versie 24.22.1 werd dezelfde data geweigerd en trad geen code-uitvoering meer op.
De demonstratie gaat verder dan eerdere publieke proof of concepts die alleen code-uitvoering bereikten op bewust verzwakte testbuilds. Op standaard builds veroorzaakten die eerdere concepten slechts crashes en beperkte geheugenlezingen, zonder code-uitvoering. Tot 22 oktober zijn geen meldingen van misbruik in het wild bekend.
De kwetsbaarheid zit in de Brotli decoder die Node.js bundelt en betreft versies uit de 22.x, 24.x en 26.x lijnen. De decoder wordt gebruikt bij het verwerken van Brotli-gecomprimeerde HTTP-responses via Node.js’s ingebouwde fetch(), en bij het decoderen van Brotli-gecomprimeerde request bodies door middleware. Zo decodeert Express 5 met zijn body parsers zoals express.json() en express.urlencoded() nu ook Brotli request bodies naast gzip en deflate. Een standaard Node.js HTTP-server decodeert Brotli request bodies niet automatisch zonder expliciete middleware of aanroep.
Imperva reproduceerde code-uitvoering via zowel request- als responsepaden, testte Express 5.0.0 tot 5.3.0 en body-parser 2.0.0 tot 2.3.0, maar niet alle tussenliggende versies. De oorzaak ligt in de decoder die een onmogelijke blokwijziging in de Brotli stream niet correct afhandelt. De decoder blijft doorgaan in een ongeldige staat, wat leidt tot een out-of-bounds write. Node.js heeft dit opgelost door een upstream Brotli patch te importeren die de decoder bij een formatfout laat stoppen.
De oplossing is het updaten naar een gepatchte Node.js release. Updates moeten ook worden doorgevoerd in container images en andere distributievormen die een Node binary bevatten, omdat deze soms over het hoofd worden gezien. Versies 20.x en ouder krijgen geen patch en dienen te worden gemigreerd naar een ondersteunde lijn. Er is geen workaround binnen Node.js zelf; het beperken van onbetrouwbaar Brotli verkeer op kwetsbare paden kan tijdelijk helpen, maar alleen de update verwijdert de kwetsbaarheid volledig.
Imperva heeft daarnaast regels toegevoegd aan zijn web application firewall en getest tegen de aanval. Vercel, dat Node.js voor klanten draait, meldde op 21 oktober dat het regels heeft toegevoegd die de aanval in inkomende requests blokkeren. Deze regels dekken echter geen Brotli responses die applicaties ophalen van andere servers en vervangen geen update.












