Node.js behebt Sicherheitslücke für Remote Code Execution im mitgelieferten Brotli-Decoder
Node.js hat Sicherheitsupdates für die Versionen 22, 24 und 26 veröffentlicht, um eine schwerwiegende Out-of-Bounds-Schreiboperation im Brotli-Decoder zu beheben, die Remote Code Execution ermöglichen konnte.
Automatisch aus dem englischen Original übersetzt.
Node.js hat am 21. Oktober kritische Sicherheitsupdates für seine drei unterstützten Release-Linien veröffentlicht: 22.x, 24.x und 26.x. Die wichtigste Korrektur behebt eine Schwachstelle in der mitgelieferten Brotli-Dekompressionsbibliothek, die Angreifern potenziell die Ausführung beliebigen Codes auf betroffenen Systemen ermöglichte. Entwickler, die End-of-Life-Versionen wie Node.js 20.x verwenden, müssen sofort aktualisieren, da diese älteren Linien keine Patches mehr erhalten.
Was passiert ist
Das Node.js-Projekt hat in diesem Release-Zyklus zehn verschiedene Fehler behoben, doch die primäre Sorge gilt CVE-2026-111497, einer Out-of-Bounds-Schreibschwache im Brotli-Decoder. Dieser Bug befindet sich in der Kopie von Googles Brotli-Bibliothek, die Node.js intern ausliefert. Er betrifft daher jede Anwendung, die Brotli-Daten dekomprimiert – sei es über das Modul node:zlib oder automatisch über Antworten von fetch(). Die Schwachstelle wird durch fehlerhafte komprimierte Eingaben ausgelöst, die dazu führen, dass der Decoder Daten über den zugewiesenen Speicherbereich hinaus schreibt.
Obwohl das Projekt diesen Fehler als hochgradig kritisch einstuft, mit dem Potenzial für Remote Code Execution (RCE), erscheint eine praktische Ausnutzung schwierig. Ein am 22. Oktober veröffentlichter öffentlicher Proof-of-Concept demonstrierte Code-Ausführung nur auf einem absichtlich geschwächten Test-Build. Bei Standard-Builds führte der Exploit lediglich zu einem Absturz und eingeschränkten Speicherlesungen, nicht aber zur vollständigen Code-Ausführung. Bis zum 22. Oktober wurden keine aktiven Angriffe in freier Wildbahn gemeldet, und gepatchte Versionen lehnen die bei diesen Tests verwendeten fehlerhaften Eingaben nun ab.
Neben dem Brotli-Problem behebt das Update drei weitere Schwachstellen mit hohem Schweregrad. Zwei davon betreffen TLS-Zertifikatsprüfungen, die Angreifer unter Umgehung der Sicherheit durch die Verwendung nicht-kanonischer IP-Adressformen oder Fullwidth-Ziffern umgehen konnten, sodass Zertifikate Hosts zugeordnet werden konnten, für die sie nicht bestimmt waren. Der dritte Fix mit hohem Schweregrad verhindert, dass dns.resolve Hostnamen abschneidet, die eingebettete Nullbytes enthalten. Die übrigen Korrekturen decken Probleme mit mittlerem und geringem Schweregrad ab, einschließlich Fehlern bei der Zufallszahlengenerierung in Start-Snapshots und Umgehungen des Berechtigungsmodells.
Wie es funktioniert
Brotli ist ein von Google entwickelter Kompressionsalgorithmus, der weit verbreitet für Web-Inhalte genutzt wird, da er bessere Kompressionsraten als gzip bietet. Node.js bündelt eine eigene Kopie des Brotli-Quellcodes, anstatt auf eine systemweite Bibliothek zurückzugreifen. Wenn eine Anwendung komprimierte Daten empfängt, verarbeitet der interne Decoder den Bitstream, um den ursprünglichen Inhalt wiederherzustellen. Die Schwachstelle entstand, weil der Decoder bestimmte Randfälle in fehlerhaften Eingaben nicht ordnungsgemäß validierte, was zu einer Out-of-Bounds-Schreiboperation führte. Das bedeutet, dass das Programm Daten an einen Speicherort schrieb, auf den es keinen Zugriff hatte, was zu Speicherkorruption führen oder es einem Angreifer ermöglichen kann, schädlichen Code einzuschleusen und auszuführen.
Die Behebung umfasst einen Upstream-Patch vom Brotli-Projekt, den Node.js in seinen Codebase integriert hat. Dieser Patch fügt strengere Validierungsprüfungen hinzu, die dazu führen, dass der Decoder bei ungültigen Eingaben frühzeitig und sicher abbricht, wodurch die Speicherkorruption verhindert wird. Da viele andere Softwareprojekte ebenfalls ihre eigenen Kopien von Brotli bündeln, sind ähnliche Updates wahrscheinlich im gesamten Ökosystem erforderlich. Derselbe Fix wurde am 21. Oktober in den Brotli-Versionen 1.2.1, 1.1.1 und 1.0.10 veröffentlicht.
Wichtige Details
- Behobene Versionen: Node.js 22.23.4, 24.22.1 und 26.12.1 enthalten die erforderlichen Patches.
- End-of-Life-Warnung: Node.js 20.x und früher werden nicht unterstützt und erhalten diesen Fix nicht; eine Migration ist erforderlich.
- Angriffsvektor: Anwendungen sind gefährdet, wenn sie Brotli-Daten aus nicht vertrauenswürdigen Quellen dekomprimieren, wie etwa Request-Bodies oder Antworten externer APIs.
- Zertifikatsblockade: Das Update blockiert zudem acht kompromittierte Schlüssel für Intermediate Certificate Authorities von eMudhra und entfernt drei emSign-Root-Zertifikate.
- Abhängigkeitsupdates: Gebündelte Versionen von undici, c-ares, OpenSSL (bei 22.x und 24.x) und SQLite (bei 22.x) wurden aktualisiert, um zusätzliche bekannte Schwachstellen zu beheben.
- Keine Workaround: Es gibt keine temporäre Abhilfemaßnahme innerhalb von Node.js für die Brotli-Schwachstelle; ein Upgrade ist die einzige Lösung.
Warum das wichtig ist
Für Backend-Ingenieure und technische Leads unterstreicht dieses Update die Risiken, die mit dem Bündeln von Drittanbieter-Bibliotheken verbunden sind. Obwohl der Code nicht vom Node.js-Team geschrieben wurde, liegt die Verantwortung für dessen Absicherung bei den Maintainern der Runtime und letztlich bei den Entwicklern, die ihn bereitstellen. Die Tatsache, dass die Schwachstelle in automatisierten Prozessen wie fetch() existiert, bedeutet, dass selbst Anwendungen, die Kompressionsbibliotheken nicht explizit nutzen, gefährdet sein können, wenn sie mit externen Diensten interagieren, die Brotli-komprimierte Daten zurückgeben.
Die Aufnahme der eMudhra-Zertifikatsblockade hebt auch die Bedeutung von Trust Stores in sicheren Kommunikationskanälen hervor. Da Node.js standardmäßig keine Sperrlistenüberprüfungen (Revocation Checks) durchführt, können kompromittierte Schlüssel von Zertifizierungsstellen vertrauenswürdig bleiben, bis sie explizit blockiert werden. Diese Veröffentlichung dient als Erinnerung daran, dass Sicherheit nicht nur darin besteht, Code-Fehler zu beheben, sondern auch die Integrität der kryptografischen Infrastruktur zu wahren, die sichere Verbindungen trägt.
Was Sie tun können
- Führen Sie sofort ein Upgrade auf Node.js 22.23.4, 24.22.1 oder 26.12.1 durch, abhängig von Ihrer aktuellen Release-Linie.
- Migrieren Sie alle Anwendungen, die noch auf Node.js 20.x oder früher laufen, auf eine unterstützte Version.
- Überprüfen Sie benutzerdefinierte Deployments oder Single-Executable-Anwendungen, um sicherzustellen, dass sie mit den gepatchten Versionen neu erstellt wurden.
- Überwachen Sie Logs auf ungewöhnliche Abstürze oder Speicherfehler, die auf versuchte Ausnutzungen vor Anwenden des Patches hinweisen könnten.
- Stellen Sie sicher, dass Ihre CI/CD-Pipelines so konfiguriert sind, dass sie die neuesten gepatchten Basis-Images für containerisierte Deployments beziehen.
- Falls ein sofortiges Upgrade nicht möglich ist, erwägen Sie die Implementierung von Firewall-Regeln auf Netzwerkebene, um verdächtige eingehende Anfragen zu blockieren, obwohl dies nicht gegen Outbound-Fetch-Schwachstellen schützt.



