Eine Shell-Sicherheitslücke ist eine Schwachstelle in einer Software, die die Ausführung von Code aus der Ferne (Remote Code Execution, RCE) ermöglicht. Der Nachsatz „-Shell“ setzte sich im Dezember 2021 mit Log4Shell (CVE-2021-44228) durch. React2Shell ersetzte im Dezember 2025 die 4 durch eine 2, und die Forschungsgemeinschaft folgte dieser Namenskonvention bei der Benennung der Fehler im Oktober. PHP gab am 21. Oktober 2026 PHP2Shell bekannt, und Node.js veröffentlichte am selben Tag seine Node2Shell-Korrekturen. Jede dieser beiden Schwachstellen hätte für sich genommen schon die Sicherheitsnachricht des Jahres sein können.
Wenn Ihr Stack PHP, Node.js, React oder Java umfasst, war wahrscheinlich mindestens eine dieser Technologien darin enthalten, wenn Sie ihn vor einigen Jahren noch genutzt haben.
Was haben alle Shell-Sicherheitslücken gemeinsam?
Jede Shell-Sicherheitslücke befindet sich unterhalb der Anwendung – in einer Logging-Bibliothek, einem UI-Framework, einer Sprach-Laufzeitumgebung oder einem Komprimierungsdecoder. Bei dem gemeldeten, nachgewiesenen Exploit von PHP gegen Apache mit mod_php wird „PHP2Shell“ ausgelöst, während PHP noch die eingehende Anfrage verarbeitet, noch bevor auch nur eine einzige Zeile Ihrer Anwendung ausgeführt wird. React2Shell betraf Anwendungen, die nie eine eigene Serverfunktion definiert hatten. Ein Team kann sorgfältigen, gründlich geprüften Code schreiben und dennoch angreifbar sein, da der anfällige Teil nicht von ihnen selbst geschrieben wurde.
Bei all diesen Shell-Sicherheitslücken gelangte von Angreifern kontrollierte Eingabe an Code, der diese als sicher behandelte. Log4j interpretierte Text, den es eigentlich nur hätte ausgeben sollen, und React baute Objekte aus Flight-Payloads neu auf, ohne deren Struktur zu überprüfen. Express 5 und body-parser 2.x dekodieren Brotli-Anfragekörper von jedem Client, der solche sendet – oft noch bevor eine Authentifizierungsprüfung durchgeführt wird.
Bei keiner dieser Sicherheitslücken muss sich der Angreifer anmelden. Eine einzige manipulierte Anfrage reicht aus, um Code auf dem Server auszuführen. Node2Shell verfügte zudem über einen zweiten Angriffsweg, da auch eine manipulierte Antwort auf eine Anfrage Ihrer App den Angriff auslösen kann.
Die meisten Teams übernehmen die anfällige Komponente zudem, ohne sie jemals bewusst ausgewählt zu haben. Log4j wurde in der Regel als Abhängigkeit einer Abhängigkeit mitgeliefert, und Node.js sowie PHP sind in den „ container “-Images enthalten, die nur selten neu kompiliert werden, es sei denn, es besteht ein zwingender Grund dafür. Bei Brotli geht es noch weiter, da dessen Decoder in Laufzeitumgebungen und Proxys wie Node.js, Bun, .NET und Envoy integriert ist. In Python laden beliebte HTTP-Clients wie „requests“ und „httpx“ Brotli automatisch, wenn es vorhanden ist, und einige Pakete, wie beispielsweise „Scrapy“, installieren es als Abhängigkeit, sodass eine App bereitgestellt werden kann, ohne dass Brotli irgendwo im eigenen Code importiert werden muss.
Shell-Sicherheitslücken im Überblick
Sicherheitslücken in der Shell durch Speicherbeschädigung (PHP2Shell und Node2Shell)
PHP2Shell ist im C-Code der PHP-eigenen Engine enthalten, während Node2Shell in Brotli zu finden ist, einer C-Komprimierungsbibliothek, die Node.js und viele andere Plattformen in ihren eigenen Code einbinden. Beide wurden durch KI-gestützte Forschung bekannt, wobei im Fall von PHP2Shell die Modelle eine Arbeit vollendeten, die Menschen bereits Jahre zuvor begonnen hatten.
PHP2Shell (CVE-2026-109618 und CVE-2026-109619)
Ein PHP-Worker bearbeitet eine Anfrage nach der anderen, reserviert für jede einzelne Speicherplatz und gibt diesen wieder frei, sobald die Anfrage abgeschlossen ist. Beide PHP2Shell-Schwachstellen führen dazu, dass PHP zu einem genau festgelegten Zeitpunkt keinen Speicher mehr hat, sodass eine Anfrage vorzeitig abgebrochen wird und einen Zeiger auf bereits freigegebenen Speicher hinterlässt. Die nächste Anfrage des Angreifers füllt diesen Speicher mit manipulierten Daten, und PHP liest diese als eines seiner eigenen internen Objekte.
CVE-2026-109618 schlägt zu, während PHP die Anfragedaten aufbereitet, und CVE-2026-109619 nutzt den Status aus, den der Worker zwischen den Anfragen beibehält, wobei der standardmäßig aktivierte Fortschritt beim Hochladen von Sitzungsdaten als einer der bestätigten Angriffswege gilt.
Der anfällige Code stammt aus PHP 5.4, das 2012 veröffentlicht wurde, und die Idee dahinter geht auf einen Fehler im Speicherlimit zurück, den Stefan Esser 2004 entdeckt hatte. Bei einer Überprüfung im Jahr 2024 trat dasselbe Problem erneut zutage, doch niemand konnte nachweisen, dass es ausnutzbar war, sodass die Behebung ins Stocken geriet. Im August 2026 gelang es dem kalifornischen Forscher Ryan Austin mithilfe von KI, das zu erreichen, was bei der Überprüfung nicht gelungen war, und den Fehler in eine funktionierende Codeausführung umzuwandeln.
Details wurden bereits vor der geplanten Veröffentlichung bekannt, PHP stellte die Korrekturen einen Tag früher, am 21. Oktober, bereit, und Cloudflare berichtete, dass noch am selben Tag mit der Ausnutzung der Schwachstelle begonnen wurde. Unser PHP2Shell-Hinweis behandelt die betroffenen Versionen, Abhilfemaßnahmen und die Vorgehensweise bei der Installation von Patches. Wir halten ihn auf dem neuesten Stand, sobald sich die Empfehlungen ändern.
Node2Shell (CVE-2026-111497)
Node.js enthält eine eigene Version von Brotli, der Komprimierungsbibliothek von Google, und Node2Shell ist ein Fehler im Brotli-Decoder, bei dem speziell gestaltete komprimierte Daten dazu führen, dass über das Ende eines Speicherpuffers hinaus geschrieben wird.
Das Codex-Sicherheitsteam von OpenAI hat berichtet, dass es sich um eine in beide Richtungen funktionierende Remote-Code-Ausführung handelt. Das bedeutet, dass ein böswilliger Client die Kontrolle über einen nicht gepatchten Server übernehmen kann und ein böswilliger Server die Kontrolle über einen nicht gepatchten Client, der komprimierte Antworten akzeptiert. In Node.js dekodieren Express 5 und body-parser 2.x Brotli-Anfrageinhalte automatisch, und fetch() tut dasselbe für Antworten.
Forschern gelang es, auf einem unveränderten Node.js-Image der Version 24.22.0 Code auszuführen, doch ihr Exploit funktionierte nicht bei jedem Versuch, sodass in der Praxis eher ein Absturz oder ein Speicherleck zu erwarten ist. In unserem Node2Shell-Hinweis sind die behobenen Versionen für jede Release-Reihe aufgeführt.
HTTP2Shell und Broccoli2Shell

Der Brotli-Decoder ist nicht nur in Node.js enthalten, weshalb derselbe Fehler auch Bezeichnungen wie „HTTP2Shell“ und „Broccoli2Shell“ erhielt (HTTP2Shell und Broccoli2Shell beziehen sich auf denselben Brotli-Fehler aus Node.js). Es gibt mittlerweile Patches für Node.js, Bun, Envoy, Istio, .NET, Python, Java brotli4j, libbrotli, Ubuntu und mehrere Linux-Distributionen, während SUSE und die Standard-Repositorys von Red Hat Enterprise Linux noch keine Korrektur bereitstellen.
Die Betreuer von Brotli hatten den Fehler bereits am 27. Februar in ihrem Quellcode behoben, doch da niemand ihn als Sicherheitsproblem erkannte, schaffte er es erst am 21. Oktober in eine Veröffentlichung. Da Projekte veröffentlichte Versionen von Brotli bündeln, blieben alle im Umlauf befindlichen Kopien acht Monate lang anfällig, und jedes Projekt musste daraufhin sein eigenes Update nach eigenem Zeitplan bereitstellen. Aikido Security verfolgt jede einzelne dieser Aktualisierungen in einer Live-Tabelle zum Patch-Status.
Logic-2Shell-Sicherheitslücken (Log4Shell und React2Shell)
Log4Shell und React2Shell traten in Java und JavaScript auf, Sprachen, die die Speicherverwaltung für den Nutzer übernehmen, sodass keine Daten beschädigt werden können. Die Schwachstellen liegen in der Art und Weise, wie eine Funktion konzipiert wurde, wodurch die Eingabe eines Angreifers darüber entscheiden konnte, welcher Code vom Server ausgeführt wird. Beide erhielten die volle CVSS-Punktzahl von 10,0 🏆.
Log4Shell (CVE-2021-44228)
Log4j ist eine Java-Protokollierungsbibliothek, und Log4j 2 unterstützte Lookups – Platzhalter in der Form ${...} –, die bei jeder Ausgabe einer Meldung durch einen tatsächlichen Wert, beispielsweise eine Umgebungsvariable, ersetzt wurden. Dies geschah bei jedem protokollierten Text, einschließlich der Texte von Benutzern. Ein Lookup-Typ, ${jndi}, weist Java an, ein Objekt von einem Verzeichnisserver abzurufen. Ein Angreifer, der also einen auf seinen eigenen Server verweisenden ${jndi}-Lookup in einen Browser-Header oder eine Minecraft-Chat-Nachricht einschleuste, konnte Log4j dazu bringen, eine Java-Klasse herunterzuladen und auszuführen.
Die meisten Apps protokollieren Benutzereingaben, wodurch fast jedes Textfeld im Internet zu einem potenziellen Einfallstor wurde. Da Log4j zudem häufig mehrere Ebenen tief in Abhängigkeitsbäumen eingebettet war, verbrachten viele Teams die ersten Tage damit, überhaupt erst herauszufinden, ob sie die Bibliothek überhaupt einsetzten. Forscher entdeckten dann Schwachstellen im ersten Patch (2.15.0) und im darauf folgenden, und die Teams führten so lange Upgrades durch, bis diese mit Version 2.17.1 behoben waren.
React2Shell (CVE-2025-55182)
React-Serverkomponenten werden auf dem Server ausgeführt und senden ihre Ausgabe an den Browser, wobei der Browser Serverfunktionen direkt aufrufen kann. React überträgt all dies in einem Format namens „Flight“ hin und her. Wenn eine Flight-Anfrage eintrifft, wandelt der Server sie wieder in Objekte um – ein Vorgang, der als Deserialisierung bezeichnet wird –, und React vertraute auf die Struktur dieser Daten. Ein Angreifer konnte eine Anfrage so gestalten, dass sie integrierte Node.js-Funktionen wie `child_process.execSync` erreichte und Shell-Befehle ausführte, ohne sich anzumelden.
Apps waren selbst dann gefährdet, wenn sie nie eine Serverfunktion definiert hatten, da der „Flight“-Decodierungscode immer dann ausgeführt wird, wenn Serverkomponenten unterstützt werden. Standardkonfigurationen von React 19 waren anfällig, und die CISA, die US-Behörde für Cybersicherheit und Infrastruktursicherheit, nahm diese Schwachstelle in ihre Liste der bei tatsächlichen Angriffen ausgenutzten Sicherheitslücken auf. Ein Folgefehler, CVE-2025-67779, umging den ursprünglichen Patch, sodass die Teams ein zweites Mal ein Update durchführen mussten.
Warum tauchen immer wieder 2Shell-Fehler auf?
PHP2Shell, Node2Shell und HTTP2Shell tauchten in derselben Woche auf wie kritische Sicherheitslücken bei eMudhra, GitLab, NGINX, Plex, Railway und OpenCode. Jede einzelne davon hätte die größte Sicherheitsmeldung des Jahres sein können, und die Leute begannen, diese Woche als „Schwarzen Oktober“ zu bezeichnen.
KI spürt alte Fehler schneller auf
PHP ist seit drei Jahrzehnten die treibende Kraft hinter einem Großteil des Internets, weshalb die meisten Menschen davon ausgingen, dass schwerwiegende Fehler längst entdeckt worden seien – doch PHP2Shell blieb 14 Jahre lang im Code verborgen. Nach der Offenlegung haben wir Aikidos „ KI-Codeanalyse “ auf den PHP-Quellcode gerichtet, und innerhalb weniger Stunden wurde PHP2Shell erneut entdeckt. Wenn ein Tool zur Abwehr bereits an einem Nachmittag einen solchen Fehler finden kann, werden die Tools der Angreifer nicht weit dahinter zurückbleiben.
So unterstützt Sie „ Aikido Security“ beim Umgang mit 2Shell-Sicherheitslücken
Aikido Die „ Software-Kompositionsanalyse “ von Security (SCA) und die Image-Prüfung von „container “ zeigen an, welche Repos und Images noch eine anfällige Laufzeitumgebung oder Bibliothek verwenden, einschließlich transitiver Brotli-Pakete.
Falls Sie nicht sofort ein Upgrade durchführen können, stehen auf der öffentlichen Amazon Elastic Container Registry von Aikidokostenlose, gepatchte „Aikido “-Images zur Verfügung, die PHP 5.5 bis 8.5 abdecken – vorerst mit Ausnahme von 8.0 und 8.1. Bei Release-Versionen, für die es noch keinen Upstream-Fix gibt, werden die Korrekturen rückportiert, sodass Sie Ihre Versionsnummer beibehalten können. Was die Brotli-Sicherheitslücke betrifft, ermöglichen Ihnen die gepatchten Node.js- und Ubuntu-Images auf Aikido, auf Plattformen ohne Hersteller-Fix bei Ihrer aktuellen Version zu bleiben, einschließlich Node.js 18 und 20.
Der kostenlose PHP2Shell-Checker testet eine öffentliche URL und zeigt Ihnen an, wie der aktuelle Status ist – von anfällig bis vollständig gepatcht.
{{walkthrough}}
