HomeCybersecurityOnderzoekers demonstreren Node2Shell RCE-exploit in een Node.js-build via gemanipuleerde Brotli-data

Onderzoekers demonstreren Node2Shell RCE-exploit in een Node.js-build via gemanipuleerde Brotli-data

Kwetsbaarheid / Webbeveiliging

Kwaadwillige Brotli-gegevens kunnen ervoor zorgen dat een toepassing op een officiële Node.js-build door een aanvaller aangeleverde code uitvoert, zo hebben beveiligingsonderzoekers van Imperva aangetoond.

Hun proof-of-concept “Node2Shell” voerde code uit op het officiële Node.js 24.22.0-image voor Linux arm64, zonder debugger of aangepaste build, door zorgvuldig geconstrueerde gegevens naar de meegeleverde Brotli-decoder te sturen (CVE-2026-111497). Node.js maakte de fout openbaar en bracht op 21 oktober fixes uit; toepassingen die onbetrouwbare Brotli-gegevens decoderen, moeten updaten.

Imperva’s test slaagde niet bij elke poging en het uitvoeren van code vergde meerdere pogingen in hun Linux arm64-opstelling. Het resultaat betreft die ene build en die specifieke configuratie; andere architecturen en de 22.x- en 26.x-lijnen zijn niet getest. In de opgeloste release 24.22.1 werden dezelfde gegevens geweigerd en was er geen code-uitvoering.

De demonstratie gaat verder dan het eerste publieke proof-of-concept, dat alleen code-uitvoering bereikte op een opzettelijk verzwakte testbuild. Op een standaardbuild rapporteerde die auteur een crash en een beperkte uitlezing van process-geheugen, niet het uitvoeren van code, en zei dat een werkende aanval op een normale build niet was bereikt.

Er zijn tot 22 oktober geen meldingen van misbruik van de fout in het wild.

Welke toepassingen zijn getroffen

De fout zit in de Brotli-decoder die Node.js bundelt, dus het raakt toepassingen op de 22.x-, 24.x- en 26.x-lijnen, niet alleen de door Imperva geteste build. Een dienst bereikt die decoder vanaf beide zijden van een HTTP-uitwisseling: wanneer hij een Brotli-gecomprimeerd antwoord leest via Node.js’ ingebouwde fetch(), of wanneer middleware een Brotli-gecomprimeerd request-body decodeert.

De body-parsers van Express 5, zoals express.json(), express.urlencoded(), express.text() en express.raw(), decoderen nu Brotli-request-bodies wanneer ze op een route worden toegepast, naast gzip en deflate. Een eenvoudige Node.js HTTP-server decodeert een Brotli-request-body niet automatisch alleen door er een te ontvangen; die decoding vereist middleware of een expliciete aanroep.

Imperva reproduceerde code-uitvoering via zowel de request-body- als de response-paden, en testte Express 5.0.0 tot 5.3.0 en body-parser 2.0.0 tot 2.3.0 op vastgezette versies, maar testte niet elke tussenliggende release.

Hoe de bug werkt

Imperva traceerde de oorzaak naar de manier waarop de decoder omgaat met een onmogelijk punt in een Brotli-stream: de stream kondigt de bloktypen aan die hij zal gebruiken naarmate het decoderen vordert, en de testinvoer bereikte een blokwisseling die volgens de structuur van de stream zelf onmogelijk was. De kwetsbare decoder interpreteerde dat als een verzoek om meer invoer en bleef doorgaan in een ongeldige toestand.

In een afzonderlijke test met een memory sanitizer leidde doorgaan vanuit die toestand tot overschrijven voorbij een bedoeld buffergebied — de out-of-bounds-write achter de fout.

Node.js repareerde de fout door een upstream Brotli-patch te importeren die ervoor zorgt dat de decoder op dat punt stopt met een formateringsfout in plaats van door te blijven.

Wat te doen

De oplossing is updaten naar een gepatchte release. De update moet ook terechtkomen in containerimages en andere artefacten die een Node-binary bundelen, wat een pakketinventaris soms kan missen. End-of-life-lijnen 20.x en eerder ontvangen de fix niet en moeten naar een ondersteunde lijn worden gemigreerd.

Het advies vermeldt geen workaround binnen Node.js, dus een toepassing die niet direct kan updaten heeft geen terugval in de runtime. Imperva stelde voor om waar praktisch onbetrouwbaar Brotli-verkeer op de getroffen paden te beperken, en zei dat alleen de update de fout verwijdert. Het bedrijf voegde ook regels toe aan zijn eigen web application firewall en testte die tegen de door hen gereproduceerde aanvallen.

Vercel, dat Node.js voor zijn klanten draait, zei op 21 oktober regels te hebben toegevoegd die de aanval in inkomende requests blokkeren. Die regels dekken geen Brotli-antwoorden die een toepassing van andere servers ophaalt, en vervangen het updaten niet.

Nural Sevimov
Nural Sevimovhttps://itvandaag.be
Nural Sevimov is oprichter en eigenaar van Actiefhost. Sinds 2011 werkt hij dagelijks met Linux-servers, hostinginfrastructuur en softwareontwikkeling. Met jarenlange praktijkervaring combineert hij technische kennis met een passie voor betrouwbare, efficiënte en moderne hostingoplossingen.
GERELATEERDE ARTIKELEN

Meest populair

Recente reacties