Die Mehrfachbenennung erklärt sich aus dem Verlauf der Entdeckung: Zunächst wurde das Problem in Node.js identifiziert, bevor Forscher feststellten, dass derselbe Fehler im Brotli-Decoder Software in mehreren Ökosystemen betrifft. Brotli ist ein quelloffenes, von Google entwickeltes und gepflegtes Projekt zur verlustfreien Datenkompression; die C-Decoder-Bibliothek ist unter anderem fest in Node.js eingebaut.

Der Name HTTP2Shell verweist auf die Auswirkungen auf HTTP-Clients und -Server, die Lücke ist jedoch nicht auf HTTP/2 beschränkt. Neben Node.js gelten unter anderem Python-HTTP-Clients wie urllib3[brotli], requests, httpx und aiohttp[speedups] als potenziell betroffen, sofern sie mit einem verwundbaren Brotli-Decoder konfiguriert sind, ebenso weitere Anwendungen und Werkzeuge mit verwundbaren Brotli-Implementierungen.

Technisch handelt es sich um einen Pufferüberlauf. Ein speziell präparierter Brotli-komprimierter Datenstrom löst einen ungültigen Blockwechsel aus, den der Decoder als gültig behandelt und als Anforderung weiterer Eingabedaten fehlinterpretiert. Indem weiter Eingabebytes an einen internen Acht-Byte-Puffer angehängt werden, wird über dessen Grenzen hinaus geschrieben und benachbarter Speicher beschädigt. In einem Sicherheitshinweis erläutert Node.js: „Ein ungültiger Blockwechsel wurde als vorübergehender Bedarf an weiterer Eingabe statt als dauerhafter Formatfehler gemeldet, sodass der Streaming-Decoder weiterhin Eingabebytes an einen internen Acht-Byte-Puffer anhängte." Laut Node.js kann das den Prozess zum Absturz bringen, Speicher offenlegen und Remote Code Execution ermöglichen. Ein aktueller Bericht des Sicherheitsunternehmens Imperva bestätigt, dass sich die Lücke bis zur Codeausführung ausnutzen lässt.

Angreifer müssen eine Anwendung lediglich dazu bringen, bösartige Daten zu dekomprimieren — etwa indem sie einer Anwendung, die eine URL abruft, eine komprimierte HTTP-Antwort ausliefern oder eine komprimierte Anfrage direkt an einen Server senden.

Am Sonntag veröffentlichte Microsoft ein außerplanmäßiges Sicherheitsupdate für .NET und warnte, dass eine erfolgreiche Ausnutzung auf Systemen mit verwundbarer .NET-Version eine Rechteausweitung erlaubt.

Die Korrekturen im Brotli-Projekt selbst wurden bereits im Februar in den Quellcode eingepflegt; stabile Fassungen für Anwender veröffentlichten Node.js und Google am 21. Oktober, die öffentliche Offenlegung folgte am Tag darauf. PyPI-Pakete mit den Fixes standen ab dem 23. Oktober bereit.

Gepatchte Versionen sind:

  • Google Brotli 1.0.10, 1.1.1, 1.2.1
  • Node.js 22.23.4, 24.22.1, 26.12.1
  • Python Brotli 1.2.1
  • Python brotlicffi 1.2.1.0

Proof-of-Concept-Exploits für Node2Shell sind veröffentlicht worden, Berichte über eine böswillige Ausnutzung in freier Wildbahn gibt es bislang nicht. Nach dem Einspielen der Updates müssen Administratoren betroffene Prozesse neu starten; betroffene Container-Images sind neu zu bauen und erneut auszurollen.

Ein eigens eingerichtetes Online-Portal, das die Auswirkungen der Lücke verfolgt, weist darauf hin, dass die Aktualisierung der System-Brotli-Bibliothek das Risiko in Node.js-Installationen und anderen Anwendungen nicht beseitigt, die eine eigene mitgelieferte Kopie der Bibliothek verwenden. Auch das Blockieren eingehender Brotli-Anfragen schließt den Weg über bösartige HTTP-Antworten nicht. Ist ein sofortiges Update nicht möglich, lautet die Empfehlung, die Brotli-Unterstützung aus Python-Anwendungen zu entfernen und eingehende Brotli-komprimierte Anfragen auf Proxy- oder Firewall-Ebene zu blockieren.