Node2Shell: Wen die Node.js-Lücke wirklich trifft

6 Min. Lesezeit Read in English

Kurz gesagt

Node2Shell trifft nur Node.js-Anwendungen, die Brotli-komprimierte Daten von Fremden entpacken, etwa Express 5 mit body-parser 2 oder fetch() gegen fremde Server. Die Lücke CVE-2026-111497 im Brotli-Decoder kann bis zur Ausführung von Fremdcode führen und ist seit dem 21. Oktober 2026 in Node.js 22.23.4, 24.22.1 und 26.12.1 behoben. Statische Websites, die Node nur beim Build nutzen, sind im Betrieb nicht betroffen. Für Node.js 20 und älter gibt es keinen Fix.

Zwei Tage nach PHP2Shell macht der nächste Name die Runde: Node2Shell. Der Name klingt nach der gleichen Größenordnung, ist sie aber nicht. Hier steht, was dahintersteckt, wen es trifft und was zu tun ist. Die Quellen nennen wir im Text.

Was Node2Shell ist

Node2Shell ist der Spitzname für CVE-2026-111497, einen Fehler im Brotli-Decoder, den Node.js mitbringt. Brotli ist ein Kompressionsverfahren, das Browser und Server nutzen, um Daten kleiner zu übertragen. Laut dem Node.js-Sicherheitshinweis kann der Decoder bei manipulierten komprimierten Daten über das Ende eines Speicherbereichs hinausschreiben. Das ist ein klassischer Weg zu Abstürzen und im schlimmsten Fall zur Ausführung von fremdem Code.

Node.js stuft die Lücke als „hoch“ ein, eine Stufe unter kritisch. Der Fehler liegt eigentlich in der Brotli-Bibliothek von Google. Laut Aikido wurde er dort bereits im Februar 2026 korrigiert, in Node.js aber erst jetzt nachgezogen.

Der Zeitablauf:

  • 21. Oktober 2026: Node.js veröffentlicht 22.23.4, 24.22.1 und 26.12.1. Das Release schließt neun weitere Lücken, darunter zwei als hoch eingestufte Umgehungen der Hostnamen-Prüfung bei TLS-Zertifikaten.
  • 22. Oktober: Ein öffentlicher Proof of Concept zeigt Codeausführung auf dem offiziellen Docker-Image von Node.js 24.22.0 für Linux arm64. Laut Aikido funktioniert er nicht zuverlässig.
  • Stand 22. Oktober abends: Laut Brandefense keine bestätigten Angriffe, kein Eintrag im Verzeichnis ausgenutzter Lücken der US-Behörde CISA.

Wer betroffen ist

Hier liegt der große Unterschied zu PHP2Shell. Dort reichte eine Anfrage an irgendeine PHP-Seite. Bei Node2Shell muss die Anwendung Brotli-Daten entpacken, die ein Angreifer kontrolliert. Laut Aikido passiert das in drei Fällen:

  • Express 5 oder body-parser 2.x: Diese entpacken Anfragen mit Content-Encoding: br automatisch. Ein Angreifer schickt den manipulierten Inhalt direkt mit.
  • fetch() gegen fremde Server: Node.js entpackt Brotli-Antworten automatisch. Wer Daten von Servern abruft, die er nicht kontrolliert, holt sich den Angriff selbst ins Haus.
  • Direkter Aufruf von node:zlib: Code, der brotliDecompress oder createBrotliDecompress mit Fremddaten aufruft.

Nicht betroffen im Betrieb ist alles, wo zur Laufzeit kein Node.js läuft. Das betrifft viele Websites, die mit Node.js nur gebaut werden.

Was das für typische Website-Setups heißt

Statische Astro-Website. Node.js läuft nur beim Build. Auf dem Server liegen fertige HTML-Dateien, die ein normaler Webserver ausliefert. Von außen gibt es nichts, was Brotli-Daten an Node.js schicken könnte. Den Build-Rechner trotzdem aktualisieren, schon wegen der übrigen neun Lücken.

Astro mit Node-Adapter, Next.js, Nuxt oder eigener Express-Server. Hier läuft Node.js dauerhaft und nimmt Anfragen an. Das gehört auf die Update-Liste, unabhängig davon, ob du Express 5 nutzt.

Laravel- oder WordPress-Projekte mit Vite. Node.js baut dort nur CSS und JavaScript. Im Betrieb läuft PHP, kein Node.js. Für diese Projekte ist PHP2Shell die dringendere Baustelle.

Headless-Setups. Ein Build, der Inhalte per fetch() aus dem eigenen CMS holt, ruft einen Server ab, den du kontrollierst. Das ist ein geringes Risiko. Anders sieht es bei Builds aus, die Daten von fremden APIs oder Feeds laden.

Was du jetzt tun solltest

  1. Version prüfen. node --version auf Servern, CI-Runnern und Entwicklungsrechnern. Für Container: docker run --rm <image> node --version. Sicher sind 22.23.4, 24.22.1, 26.12.1 und neuer.
  2. Container neu bauen. Images mit fester Version wie node:24.22.0-alpine bleiben verwundbar, bis das Base-Image angehoben und neu gebaut ist.
  3. Node.js 20 ablösen. Für Node.js 20 und älter gibt es keinen Fix. Vercel schreibt, Projekte auf Node.js 20 müssten auf 22 oder 24 wechseln und neu deployen.
  4. Linux-Pakete prüfen. Node.js aus Distributionspaketen nutzt teils die Brotli-Bibliothek des Systems. Laut Brandefense war der Stand bei Debian am 23. Oktober uneinheitlich: Für bookworm gab es ein korrigiertes brotli-Paket, für trixie noch nicht.
  5. Python nicht vergessen. Die gleiche Brotli-Bibliothek steckt laut Open Source Malware auch im Python-Paket Brotli, korrigiert ab Version 1.2.1, und in brotlicffi ab 1.2.1.0. Betroffen sind HTTP-Clients wie urllib3, httpx und aiohttp, wenn sie Antworten von fremden Servern entpacken.

Wenn du nicht sofort aktualisieren kannst

Laut Aikido hilft als Übergang, Anfragen mit Content-Encoding: br schon am Reverse Proxy oder Load Balancer abzuweisen. Vercel hat dafür am 21. Oktober eine Firewall-Regel für alle Projekte aktiviert. Beides schützt nur eingehende Anfragen. Antworten, die deine Anwendung per fetch() von fremden Servern lädt, deckt es nicht ab. Dafür bleibt nur das Update.

Was wir bei Codeäffchen machen

Unsere Website ist eine statische Astro-Seite. Node.js läuft nur im Build, und der verarbeitet nur unsere eigenen Inhalte. Die ausgelieferte Seite enthält kein Node.js. Für Kundenprojekte mit Node.js im Betrieb gilt die Liste oben: Version prüfen, Images neu bauen, Node.js 20 ablösen.

Die Lehre ist dieselbe wie bei PHP2Shell, nur mit kleinerem Ausschlag: Wer weiß, wo welche Laufzeit in welcher Version läuft, ist an solchen Tagen in Minuten fertig.


Du betreibst eine Node.js-Anwendung oder eine Astro-Seite mit serverseitigem Rendering und bist unsicher, ob sie betroffen ist? Mehr zu unserer Arbeit mit Astro findest du auf der Seite Astro-Agentur, oder schreib uns kurz.

Häufige Fragen

Ist Node2Shell so gefährlich wie PHP2Shell?

Nein, die Lage ist eine andere. PHP2Shell traf jede PHP-Website mit einer einzigen Anfrage. Node2Shell setzt voraus, dass die Anwendung Brotli-Daten aus fremder Hand entpackt. Node.js stuft die Lücke als hoch ein, nicht als kritisch, und bis zum 22. Oktober 2026 waren keine Angriffe bekannt.

Ist meine Astro-Website von Node2Shell betroffen?

Eine statische Astro-Website nicht im laufenden Betrieb: Ausgeliefert werden fertige Dateien, auf dem Server läuft kein Node.js. Node.js wird nur beim Build genutzt. Anders ist es bei serverseitigem Rendering mit dem Node-Adapter: Dann läuft Node.js dauerhaft und sollte auf eine korrigierte Version aktualisiert werden.

Welche Node.js-Versionen sind sicher?

Node.js 22.23.4, 24.22.1 und 26.12.1, erschienen am 21. Oktober 2026. Ältere Versionen dieser Linien sind betroffen. Für Node.js 20 und ältere Versionen, deren Unterstützung beendet ist, gibt es keinen Fix.

Wie prüfe ich, ob meine Anwendung betroffen ist?

Mit node --version die Version auf Server, CI und in Docker-Images prüfen. Mit npm ls express body-parser nachsehen, ob Express 5 oder body-parser 2 im Einsatz ist. Im Code nach brotliDecompress und createBrotliDecompress suchen und fetch()-Aufrufe an Server notieren, die nicht unter deiner Kontrolle stehen.

Daniel Nilges
Daniel Nilges

Gründer & Full-Stack-Entwickler

20+ Jahre Erfahrung in der Webentwicklung. Spezialisiert auf Laravel, WordPress und individuelle Software für den Mittelstand.