KIungefiltert

· 4 Min. Lesezeit · Read in English

Node2Shell: Brotli-Lücke betrifft Node.js, .NET, Python und Bun und steht jetzt im CISA-Katalog

Ein Out-of-bounds-Write in Googles Brotli-Decoder (CVE-2026-111497, CVSS 9.2) betrifft Node.js, .NET, PowerShell, Python-Pakete und Bun. CISA meldet Ausnutzung. Patches sind da.

SicherheitSelfhosting

Brotli ist ein Kompressionsverfahren von Google. Man begegnet ihm überall dort, wo HTTP-Antworten oder Dateien klein gemacht werden. Im Decoder dieser Bibliothek steckt ein Speicherfehler, und weil so viele Laufzeiten denselben C-Code mitbringen, müssen jetzt viele Leute patchen. Auf X und im WhatsApp-Kanal habe ich die Lücke kurz gemeldet. Seitdem ist einiges passiert, darum hier die ausführliche Fassung.

Was passiert ist

Die Lücke trägt inzwischen die Kennung CVE-2026-111497. Bekannt ist sie als „Node2Shell“, je nach Quelle auch als HTTP2Shell, Broccoli2Shell oder Brotli2Shell. Es handelt sich um einen Out-of-bounds-Write: Das Programm schreibt Daten über das Ende eines reservierten Speicherbereichs hinaus und überschreibt dabei, was dahinter liegt. Laut Brandefense und weiteren Analysen wertet der Decoder einen bestimmten ungültigen Datenstrom fälschlich als „brauche mehr Input“ statt als Formatfehler. Danach hängt er weitere Daten an einen internen Puffer von acht Byte an und schreibt über dessen Ende hinaus.

Die Folgen reichen vom Absturz über das Auslesen von Prozessspeicher bis zur Ausführung von Schadcode. Google bewertet die Lücke mit CVSS 4.0 als 9.2 (kritisch). Microsoft vergibt CVSS 3.1 mit 8.1 und schätzt eine Ausnutzung als „wahrscheinlicher“ ein (SecurityWeek).

Betroffen sind die Brotli-Versionen 1.0.3 bis 1.2.0 auf allen Plattformen. Gefunden hat den Fehler OpenAI Codex Security. Die eigentliche Korrektur steckte laut OpenAI schon seit Februar im Brotli-Quellcode, galt damals aber nicht als Sicherheitsfix. Eine neue Version erschien erst jetzt.

Was sich seit meinem Post geändert hat

Als ich gepostet habe, war noch unklar, ob die Lücke ausgenutzt wird. Jetzt gibt es dazu Neues: Die US-Behörde CISA hat CVE-2026-111497 am 27. Oktober in ihren Katalog bekannter ausgenutzter Lücken (KEV) aufgenommen. US-Bundesbehörden müssen bis zum 10. November patchen. Wer angreift und wie, sagt CISA nicht.

Belegt sind bisher Angriffsversuche auf Honeypots, also Lockrechner, die Angriffe aufzeichnen sollen. ELLIO hat am 26. Oktober eine bösartige Anfrage gegen Node.js 24.22.0 registriert. Laut ELLIO war der Exploit aber kaputt und lieferte in 50 Tests keine Shell. Previdian hat am 27. Oktober einen Versuch protokolliert und ausdrücklich betont, dass das keinen Erfolg bedeutet. Erfolgreiche Einbrüche in produktive Systeme sind öffentlich bisher nicht bekannt.

Im Labor sieht das anders aus. Imperva hat Codeausführung auf dem offiziellen Node.js-Image erreicht, allerdings nicht bei jedem Versuch. Es gibt öffentliche Proof-of-Concepts, also Demonstrations-Exploits. Ob die Lücke praktisch zu Codeausführung führt oder vor allem Abstürze verursacht, wird noch diskutiert. Der Unterschied ist für die Praxis egal: patchen muss man so oder so.

Wer betroffen ist

Angreifbar ist nur, wer Brotli-Daten aus nicht vertrauenswürdiger Quelle dekodiert. Das können komprimierte HTTP-Request-Bodys sein, Antworten fremder Server oder komprimierte Dateien. Ein nackter Node.js-HTTP-Server tut das nicht von selbst, Middleware wie Express 5 oder body-parser 2 schon. In .NET ist der Pfad nicht standardmäßig aktiv, sondern läuft über Request-Dekompression in ASP.NET Core, automatische Dekompression im HttpClient oder direkte Nutzung von BrotliStream/BrotliDecoder. Apache und Nginx gelten in der Standardkonfiguration als nicht betroffen.

Gepatchte Versionen laut SecurityWeek und heise:

  • Brotli: 1.0.10, 1.1.1, 1.2.1
  • Node.js: 22.23.4, 24.22.1, 26.12.1 (seit 21. Oktober). Ältere Linien ohne Support bekommen keinen offiziellen Fix.
  • Python: Brotli 1.2.1 und brotlicffi 1.2.1.0
  • .NET: 8.0.33, 9.0.22, 10.0.14 und .NET 11 RC 3 (seit 25. Oktober), dazu Visual Studio 2019, 2022, 2026
  • PowerShell: 7.4, 7.5 und 7.6 mit aktuellen Updates
  • Bun, Envoy und Istio haben ebenfalls nachgezogen.

Laut Tracker broccoli2shell.com fehlen Patches noch bei DuckDB, Apache Arrow, 7-Zip-zstd, p7zip und EDK II. Broadcom meldet zudem VMware SDDC Manager als betroffen, Patches stehen dort noch aus. Auch Bindings für Java, PHP, Ruby und Go, die die C-Bibliothek einbinden, kommen in Frage.

Was du tun solltest

  1. Laufzeiten aktualisieren: Node.js, Bun, .NET und PowerShell auf die oben genannten Stände bringen.
  2. Abhängigkeiten prüfen: In Python-Projekten nach Brotli und brotlicffi suchen, auch als indirekte Abhängigkeit. Für andere Sprachen gilt dasselbe für Brotli-Bindings.
  3. Dienste neu starten: Laufende Prozesse nutzen den alten Code weiter, bis sie neu gestartet sind.
  4. Container-Images neu bauen, und zwar auf gepatchtem Basis-Image. Ein Update auf dem Host hilft dem Container nicht.
  5. Übergangsweise Brotli-Dekodierung abschalten, wenn ein Update noch nicht möglich ist. Aikido gibt dafür Hinweise.

Meine Einordnung: Bisher gibt es nur Versuche auf Honeypots und keine bestätigten Einbrüche. Ein KEV-Eintrag, öffentliche PoCs und Codeausführung im Labor reichen trotzdem, um das nicht auf den nächsten Wartungstermin zu schieben. Wer selbst Node.js-Dienste mit Express oder .NET-APIs mit Request-Dekompression betreibt, sollte das diese Woche erledigen.

Quellen