HomeCybersecurityBrotli-decoderfout in Node.js kan op afstand code-uitvoering mogelijk maken in alle ondersteunde...

Brotli-decoderfout in Node.js kan op afstand code-uitvoering mogelijk maken in alle ondersteunde versies

Vulnerability / Web Security

Node.js heeft op 21 oktober beveiligingsupdates uitgebracht voor zijn drie ondersteunde release-lijnen, 22.x, 24.x en 26.x, waarin 10 kwetsbaarheden zijn opgelost. De ernstigste is een fout in de ingebouwde Brotli-decompressiecode die volgens het project uitvoering van code op afstand mogelijk kan maken, wat betekent dat een aanvaller code naar keuze op het getroffen systeem zou kunnen uitvoeren.

Elke ondersteunde lijn heeft een gefixeerde versie: 22.23.4 en 24.22.1 op de long-term support-lijnen, en 26.12.1 op de current-lijn. Node.js 20.x en eerder zijn end-of-life bereikt en krijgen de fix niet, dus die moeten worden gemigreerd naar een ondersteunde lijn.

De Brotli-kwetsbaarheid zit in code die Node.js bundelt, niet in de code van een gebruiker. Node.js voert die code uit wanneer het Brotli-gegevens decompresseert, of dat nu rechtstreeks gebeurt via de node:zlib-module of automatisch wanneer code fetch() aanroept op een response die met Brotli is gecomprimeerd.

Een applicatie is blootgesteld wanneer zij Brotli-gegevens decompresseert die een aanvaller kan sturen, bijvoorbeeld in een request-body of in een response die van een andere server wordt opgehaald.

De Brotli-kwetsbaarheid

De fout is een schrijfoperatie buiten de buffer in de Brotli-decoder, veroorzaakt door onjuist gevormde gecomprimeerde invoer. De oplossing is een upstream-patch van het Brotli-project die Node.js heeft overgenomen; die zorgt ervoor dat de decoder ongeldige invoer detecteert en eerder stopt in plaats van voorbij de buffer te schrijven.

Brotli is de compressiebibliotheek van Google, en Node.js levert een eigen kopie mee. Dezelfde fix verscheen in Brotli 1.2.1, 1.1.1 en 1.0.10 op 21 oktober, dus andere software die Brotli inbrengt kan ook deze update nodig hebben. De wijziging werd oorspronkelijk in de bron van Brotli aangebracht in februari 2026 en als beveiligingsrelease pas in oktober uitgebracht.

Het project omschrijft wat de fout mogelijk maakt als “remote code execution” (uitvoering van code op afstand) en de fout is gecategoriseerd als hoog in plaats van kritiek. Hoe ver dat in de praktijk te gebruiken is, blijkt beperkter.

Een openbaar proof-of-concept dat op 22 oktober werd gepubliceerd, bereikte code-uitvoering alleen tegen een opzettelijk verzwakte testbuild. Op een standaard Node.js-build rapporteerde de auteur een crash en een beperkte uitlezing van process-geheugen, geen code-uitvoering, en gaf aan dat een werkende aanval op een normale build niet was bereikt.

Een gepatchte Node.js weigert de onjuist gevormde invoer die het proof-of-concept gebruikt, en er zijn tot 22 oktober geen meldingen van uitbuiting in het wild bekend.

De andere kwetsbaarheden

Drie van de overige fixes zijn ook als hoog gecategoriseerd. Twee betreffen TLS-certificatecontroles die een aanvaller kan omzeilen door het IP-adres van een server in een ongewone vorm te schrijven, waardoor een certificaat overeenkomt met een host waarvoor het niet bedoeld is (CVE-2026-106069 en CVE-2026-105483). De derde voorkomt dat dns.resolve een hostnaam afkapt bij een ingesloten null-byte (CVE-2026-105482).

Node.js beoordeelt CVE-2026-105483 als hoog, hoewel de commit die het probleem repareerde het bug als laag-severity en moeilijk uit te buiten omschrijft.

De overige problemen zijn van gemiddeld en laag niveau. Een middelgrote fout zorgt ervoor dat crypto.randomUUID() en crypto.randomInt() dezelfde waarden teruggeven in elk proces wanneer een applicatie wordt gebouwd als een opstart-snapshot of als een enkel uitvoerbaar bestand (CVE-2026-106074), wat alles ondermijnt dat vertrouwt op die waarden als onvoorspelbaar.

De volledige set, en de release-lijnen die elk beïnvloedt:

CVE Omschrijving Ernst Getroffen release-lijnen
CVE-2026-111497 Schrijfoperatie buiten de buffer in de Brotli-decoder; volgens het project uitvoering van code op afstand mogelijk Hoog 22.x, 24.x, 26.x
CVE-2026-106069 Bypass van TLS-hostnaamcontrole wanneer een host naar een IP-adres in niet-canonieke vorm resolveert Hoog 22.x, 24.x, 26.x
CVE-2026-105483 Bypass van TLS-hostnaamcontrole wanneer een IP is geschreven in fullwidth-cijfers Hoog 24.x, 26.x
CVE-2026-105482 dns.resolve kappt namen af die een null-byte bevatten Hoog 22.x, 24.x, 26.x
CVE-2026-105481 Keep-alive-socket kan een response verwerken die is geschreven voordat het request werd verzonden Gemiddeld 22.x, 24.x, 26.x
CVE-2026-106072 Certificaatvalidatie voor niet-canonieke IPv4 staat DNS-namen toe IP-eindpunten te authenticeren Gemiddeld 22.x, 24.x, 26.x
CVE-2026-106074 Caches van randomUUID() en randomInt() hergebruikt in opstart-snapshots en enkel-uitvoerbare apps Gemiddeld 22.x, 24.x, 26.x
CVE-2026-106070 ZipFile retourneert door een aanvaller gecontroleerde bytes na een mislukte header-check Laag 26.x
CVE-2026-106071 Permission Model geeft te veel bestandsaccess via een wildcard-lookup Laag 26.x
CVE-2026-106073 Omzeiling van Permission Model met fs.realpathSync Laag 22.x, 24.x, 26.x

De blokkering van eMudhra-certificaten

Dezelfde updates zorgen er ook voor dat Node.js acht intermediate certificaatautoriteit-sleutels van de Indiase provider eMudhra, die enkele dagen eerder als gecompromitteerd werden gerapporteerd, niet langer vertrouwt.

Node.js gebruikt de root-certificaatautoriteitenlijst van Mozilla maar voert standaard geen revocatiecontroles uit, dus vóór deze update zou een certificaatketen die is opgebouwd op één van de gecompromitteerde sleutels nog steeds slagen.

De releases voegen een ingebouwde blokkering toe voor de acht sleutels en werken de gebundelde root-lijst bij om drie emSign-roots te verwijderen. Go bracht op 20 oktober een vergelijkbare blokkering in zijn eigen update uit.

Connecties die voortkomen uit een sessie die vóór de update begonnen zijn, worden niet opnieuw gecontroleerd totdat die sessie verloopt, en end-of-life-lijnen krijgen de blokkering niet.

Bijgewerkte afhankelijkheden

Buiten de 10 kwetsbaarheden vernieuwen de updates verschillende gebundelde onderdelen. De kopie van undici, de HTTP-client achter fetch(), gaat naar een versie die drie matige waarschuwingen oplost: één in de Subresource Integrity-controle en twee geheugen-uitputtingsfouten, waarvan één in de WebSocket-client die in Node.js is ingebouwd.

Node.js heeft ook de gebundelde c-ares op alle lijnen bijgewerkt, OpenSSL op 22.x en 24.x, en SQLite op 22.x, om fixes voor publiek bekende kwetsbaarheden op te nemen.

Als u nog niet kunt upgraden

Upgraden is de oplossing. Het advisory biedt geen tijdelijke workaround voor de Brotli-kwetsbaarheid, dus een applicatie die niet onmiddellijk kan upgraden heeft geen binnen Node.js zelf bruikbare fallback.

Vercel, dat Node.js voor zijn klanten draait, zei op 21 oktober firewallregels te hebben toegevoegd die de aanval in inkomende requests blokkeren. Die regels dekken geen Brotli-responses die een applicatie van andere servers ophaalt, en vervangen een upgrade 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