Node.js-Brotli-Schwachstelle in allen unterstützten Versionszweigen behoben
Die Node.js-Brotli-Schwachstelle wurde im Rahmen der am 21. Oktober veröffentlichten Sicherheitsupdates in allen drei unterstützten Versionszweigen der Plattform behoben. Die Releases beheben zehn Schwachstellen, allen voran CVE-2026-111497, ein schwerwiegendes Problem, das laut dem Node.js-Projekt remote code execution ermöglichen könnte. Ein Angreifer könnte dadurch ein betroffenes System veranlassen, Code seiner Wahl auszuführen.
Die korrigierten Releases sind Node.js 22.23.4 und 24.22.1 in den long-term support-Versionszweigen sowie 26.12.1 im aktuellen Versionszweig. Node.js 20.x und alle früheren Versionszweige haben ihr end of life erreicht und erhalten daher keine Sicherheitskorrekturen mehr. Anwendungen, die diese Releases noch verwenden, müssen deshalb auf einen unterstützten Versionszweig umgestellt werden, statt auf einen Patch zu warten.
CVE-2026-111497 betrifft den mit Node.js gebündelten Brotli-Decoder. Brotli ist eine Kompressionsbibliothek von Google, die die Größe übertragener Daten reduziert. Node.js kann seine gebündelte Kopie direkt über das Modul node:zlib aufrufen oder automatisch verwenden, wenn fetch() eine mit Brotli komprimierte Antwort empfängt. Ein Risiko besteht, wenn eine Anwendung von einem Angreifer kontrollierte Brotli-Daten dekomprimiert, darunter einen übermittelten Request Body oder eine von einem anderen Server abgerufene Antwort.
Der zugrunde liegende Fehler ist ein out-of-bounds write. Er tritt auf, wenn Software Daten außerhalb des dafür reservierten Speicherbereichs ablegt. Fehlerhaft formatierte komprimierte Eingaben können den Decoder dazu bringen, über das Ende seines Buffers hinaus zu schreiben. Node.js übernahm eine upstream-Korrektur des Brotli-Projekts, die ungültige Eingaben erkennt und die Verarbeitung früher beendet. Dieselbe Korrektur erschien am 21. Oktober in Brotli 1.2.1, 1.1.1 und 1.0.10. Daher muss möglicherweise auch andere Software aktualisiert werden, die eine eigene Kopie von Brotli enthält. Die Codeänderung wurde ursprünglich im Februar 2026 im Quellcode von Brotli vorgenommen, jedoch erst im Oktober als Sicherheitsrelease veröffentlicht.
Das Node.js-Projekt spricht von möglicher remote code execution, die nachgewiesenen Ergebnisse sind jedoch begrenzter. Ein am 22. Oktober veröffentlichtes öffentliches proof of concept erreichte eine Codeausführung nur mit einem absichtlich geschwächten Test-Build. Bei einem standardmäßigen Node.js-Build meldete der Autor einen Absturz und einen eingeschränkten Lesezugriff auf den Prozessspeicher, konnte jedoch keinen funktionsfähigen Angriff zur Codeausführung vorführen. Aktualisierte Node.js-Releases weisen die bei dieser Demonstration verwendete fehlerhafte Eingabe zurück. Bis zum 22. Oktober waren keine aktiven Angriffe gemeldet worden.
Drei weitere Schwachstellen sind als schwerwiegend eingestuft. CVE-2026-106069 und CVE-2026-105483 betreffen Hostname-Prüfungen von Transport Layer Security (TLS), mit denen bestätigt wird, dass eine verschlüsselte Verbindung den vorgesehenen Server erreicht hat. Ungewöhnliche Darstellungen einer IP-Adresse könnten dazu führen, dass ein Zertifikat zu einem Host passt, zu dem es nicht passen sollte. CVE-2026-105483 betrifft insbesondere IP-Adressen, die mit fullwidth digits geschrieben sind, und wirkt sich auf 24.x und 26.x aus. Node.js stuft die Schwachstelle als schwerwiegend ein, obwohl der korrigierende Commit sie als geringfügig und schwer auszunutzen beschreibt. CVE-2026-105482 führt dazu, dass dns.resolve, eine Funktion zur Namensauflösung über das Domain Name System (DNS), einen Hostnamen an einem eingebetteten Null-Byte abschneidet. CVE-2026-106069, CVE-2026-105482 und die Brotli-Schwachstelle betreffen 22.x, 24.x und 26.x.
Zu den Schwachstellen mittleren Schweregrads gehört CVE-2026-105481, bei der eine wiederverwendete keep-alive connection eine Antwort verarbeiten kann, die geschrieben wurde, bevor die zugehörige Anfrage gesendet wurde. CVE-2026-106072 ermöglicht es DNS-Namen, IP-Endpunkte zu authentifizieren, wenn eine nicht standardmäßige IPv4-Formatierung verwendet wird. CVE-2026-106074 führt dazu, dass crypto.randomUUID() und crypto.randomInt() in jedem Prozess dieselben Werte zurückgeben, wenn eine Anwendung als startup snapshot oder single-executable application verpackt ist. Ein startup snapshot speichert den vorbereiteten Zustand einer Anwendung zur Wiederverwendung. Sich wiederholende Werte, die eigentlich unvorhersehbar sein sollten, können Anwendungsfunktionen beeinträchtigen, die von deren Zufälligkeit abhängen. Alle drei Schwachstellen mittleren Schweregrads betreffen 22.x, 24.x und 26.x.
Drei Schwachstellen mit geringem Schweregrad vervollständigen die Liste. CVE-2026-106070 ermöglicht es ZipFile in 26.x, nach einer fehlgeschlagenen Header-Prüfung von einem Angreifer kontrollierte Bytes zurückzugeben. CVE-2026-106071 kann über einen wildcard lookup im Permission Model mehr Dateizugriff als vorgesehen gewähren und betrifft 26.x. CVE-2026-106073 ermöglicht über fs.realpathSync eine Umgehung des Permission Model und betrifft alle drei unterstützten Versionszweige.
Die Releases ändern außerdem die Zertifikatsverarbeitung, nachdem acht intermediate certificate authority keys von eMudhra als kompromittiert gemeldet worden waren. Eine certificate authority stellt digitale Nachweise aus, mit denen die Identität eines Onlinedienstes bestätigt wird. Node.js stützt sich auf die root certificate list von Mozilla, prüft revocation jedoch standardmäßig nicht. Daher konnten chains, die auf diesen keys basierten, zuvor weiterhin erfolgreich validiert werden. Die Updates fügen eine integrierte Sperre für alle acht keys hinzu und entfernen drei emSign roots aus der mitgelieferten Liste. Go führte dieselbe Sperre mit einem Update vom 20. Oktober ein. Verbindungen, die aus vor dem Update eingerichteten Sessions wiederaufgenommen werden, werden erst nach Ablauf dieser Sessions erneut geprüft. Node.js-Versionszweige, die ihr end of life erreicht haben, erhalten die Sperre nicht.
Gebündelte Dependencies erhielten weitere Updates. Undici, der HTTP-Client hinter fetch(), wurde auf ein Release aktualisiert, das drei Advisories mittleren Schweregrads behebt: eines betrifft die Prüfung der Subresource Integrity, zwei weitere die Erschöpfung des Arbeitsspeichers, darunter eines im mit Node.js ausgelieferten WebSocket-Client. Das Projekt aktualisierte außerdem c-ares in allen unterstützten Versionszweigen, OpenSSL in 22.x und 24.x sowie in 22.x die von vielen Webanwendungen verwendete relationale Datenbank, um Korrekturen für öffentlich bekannte Schwachstellen zu übernehmen.
Ein Upgrade ist die vorgesehene Lösung; der Sicherheitshinweis nennt keine vorübergehende Node.js-Problemumgehung für die Brotli-Schwachstelle. Vercel teilte mit, am 21. Oktober firewall-Regeln eingerichtet zu haben, um Angriffe über eingehende Anfragen zu blockieren. Diese Regeln decken jedoch keine mit Brotli komprimierten Antworten ab, die eine Anwendung von externen Servern abruft, und ersetzen die Updates nicht. Unternehmen, die bei diesen Arbeiten Unterstützung benötigen, bietet AEU-I sicherheitsorientierte IT-, Infrastruktur- und Beratungsleistungen. Websitebetreiber sollten die tatsächlich von jeder Anwendung ausgeführte Node.js-Version überprüfen, auch bei verwalteten oder containerisierten Deployments, statt davon auszugehen, dass ein Betriebssystemupdate die Runtime der Anwendung geändert hat.