React2Shell (CVE-2025-55182): Der Deserialisierungs-Geist in der RSC-Maschine

In den letzten Wochen des Jahres 2025, während die meisten Engineering-Teams sich auf die Feiertagsruhe vorbereiteten, trat eine Schwachstelle auf, die die moderne Web-Sicherheit neu definierte. Der sogenannte “React2Shell” und die Zuordnung als CVE-2025-55182 war kein gewöhnlicher Bug—es war ein fundamentaler Bruch im Vertrauensmodell der React Server Components (RSC).
Mit einem CVSS-Score von 10.0 ermöglicht React2Shell es unautorisierte Angreifern, Remote Code Execution (RCE) durch eine einzelne, speziell gestaltete HTTP-Anfrage zu erreichen. Ähnlich wie der berüchtigte Log4Shell von 2021 liegt die Gefahr in seiner Allgegenwart und der “stillen” Natur des zugrunde liegenden Protokolls.
In diesem Deep Dive untersuchen wir die Mechanik des RSC “Flight”-Protokolls, den Deserialisierungsfehler, der die Tür zum Chaos öffnete, und wie Sie Ihre Infrastruktur im Jahr 2026 schützen können.
1. Was ist das RSC Flight-Protokoll?
Um React2Shell zu verstehen, müssen wir zunächst das Flight-Protokoll verstehen.
Traditionell sendeten React-Apps JSON oder HTML. Mit der Einführung von React 19 und dem App Router führte React React Server Components (RSC) ein. RSCs erlauben es dem Server, UI-Komponenten zu rendern und sie in einem proprietären Format namens Flight an den Client zu streamen.
Wie Daten in Flight bewegt werden
Wenn ein Client eine RSC anfordert oder eine “Server Action” aufruft, sendet der Server nicht nur HTML; er sendet einen Stream serialisierter JavaScript-Objekte. Diese Objekte repräsentieren:
- Component Trees: Die Struktur Ihrer UI.
- Props: Daten, die an Komponenten übergeben werden.
- Server References: Kennungen für Funktionen, die auf dem Server aufgerufen werden können.
- Promises: Platzhalter für noch nicht eingetroffene Daten.
Das Flight-Protokoll verwendet eine spezifische Syntax, bei der Zeilen mit IDs (z.B. 1:, 2:) vorangestellt sind und spezielle Symbole wie $@ für Referenzen oder $B für Blobs verwendet werden.
Der serverseitige Decoder (zu finden in Paketen wie react-server-dom-webpack) ist verantwortlich dafür, eingehende Client-Daten—wie Argumente für eine Server Action—zu rekonstruieren und in JavaScript-Objekte umzuwandeln, die der Server verwenden kann. Hier versteckte sich der Geist.
2. Die Schwachstelle: CVE-2025-55182 erklärt
Der Kern von React2Shell ist ein unsicherer Deserialisierungsfehler. Konkret versagte der React-Server-Decoder darin, Objekt-Eigenschaften während der Rekonstruktion des Flight-Streams zu validieren.
Prototype Pollution auf dem Server
Die Schwachstelle nutzt eine klassische JavaScript-Schwäche: Prototype Pollution. In JavaScript erben fast alle Objekte von Object.prototype. Wenn ein Angreifer Eigenschaften in das Prototype-Objekt injizieren kann, kann er das Verhalten aller Objekte im System verändern.
Während des Decodierungsprozesses verwendete React Eigenschaftsnamen, die vom eingehenden Flight-Payload geliefert wurden, um Werte zuzugreifen, ohne zu prüfen, ob diese Eigenschaften zum Objekt selbst gehören (also ohne hasOwnProperty-Checks).
Der Fehler: Durch das Erstellen eines Payloads, das auf Eigenschaften wie __proto__ oder das Überschreiben interner Methoden wie then verweist, konnte ein Angreifer die React-Laufzeit dazu verleiten, die Prototyp-Kette zu traversieren und unbefugte Funktionen auszuführen.
3. Aufbau des Exploits: Vom Request zum Shell
Das Genie—und der Schrecken—von React2Shell besteht darin, dass keine Authentifizierung erforderlich ist. Ein Angreifer findet einfach einen Endpunkt, der RSC-Payloads akzeptiert (was in fast jeder Route einer Standard-Next.js App Router-Anwendung der Fall ist), und sendet eine POST-Anfrage.
Der Angriffsablauf
Forscher identifizierten eine vierstufige “Gadget-Kette”, die diesen Deserialisierungsfehler in eine vollständige Shell verwandelt:
Stufe 1: Die Selbstreferenzierende Schleife: Der Angreifer sendet eine multipart/form-data-Anfrage, die ein “Fake Chunk”-Objekt enthält. Dieses Objekt imitiert die interne Chunk-Klasse von React.
Stufe 2: Property Shadowing: Das Payload setzt die then-Eigenschaft dieses Fake-Chunks auf Chunk.prototype.then. Das erzeugt eine zirkuläre Referenz, die den Server dazu zwingt, das Objekt “abzuwarten”.
Stufe 3: Der Blob-Handler ($B): Der Angreifer nutzt das $B-Präfix (reserviert für Blobs), um eine spezielle interne React-Funktion auszulösen. Diese Funktion wird dazu verleitet, eine bösartige Referenz nachzuschlagen.
Stufe 4: Code-Ausführung: Durch das Verketten dieser Gadgets erhält der Angreifer Zugriff auf die Node.js-Module process oder child_process. Damit können Systembefehle wie whoami, curl oder sogar eine Reverse-Shell ausgeführt werden.
Ein Beispiel (konzeptuell) für eine bösartige Payload:
POST /api/server-action HTTP/1.1
Content-Type: multipart/form-data; boundary=----Boundary
Next-Action: [Action_ID]
------Boundary
Content-Disposition: form-data; name="0"
{"then":"$1:__proto__:then","status":"resolved_model","value":"payload_here"}
------Boundary
Content-Disposition: form-data; name="1"
"$@0"
------Boundary--
Hinweis: Dies ist eine vereinfachte Darstellung. Realistische Exploits verwenden komplexe Unicode-Obfuskation, um einfache WAF-Signaturen zu umgehen.
4. Warum ist das “Der Deserialisierungs-Geist”?
Im Gegensatz zu traditionellen SQL-Injection oder XSS passiert React2Shell bevor dein Anwendungscode überhaupt ausgeführt wird.
Umgehung von Auth-Layern
Da das Flight-Protokoll auf Framework-Ebene (innerhalb von Reacts Interna) verarbeitet wird, wird das bösartige Payload deserialisiert, bevor es deine Middleware oder Authentifizierungsprüfungen erreicht. Wenn das Framework den Stream verarbeitet, ist die RCE bereits ausgelöst.
Ziel-Fläche
Die Schwachstelle ist nicht auf Apps beschränkt, die “Server Actions” verwenden. Jede Anwendung, die eine verwundbare Version von React 19 ausführt, die RSC unterstützt, ist potenziell gefährdet. Dazu gehören:
- Next.js (15.x und 16.x)
- React Router (im RSC-Modus)
- Waku
- Vite/Parcel RSC-Integrationen
5. Die reale Auswirkung (2025-2026)
Stand Anfang 2026 sind die Daten zu den Auswirkungen von React2Shell erschütternd.
Weitverbreitete Ausnutzung
Sicherheitsfirmen wie Wiz und Mandiant berichteten, dass 39% der Cloud-Umgebungen innerhalb von 48 Stunden nach Bekanntwerden mindestens eine verwundbare React-Instanz enthielten. Automatisierte Scanner machten den Bug schnell nutzbar, was führte zu:
- Kryptojacking: Massive Verbreitung von XMRig-Mining-Software auf Vercel- und AWS Lambda-Instanzen.
- Datenexfiltration: Angreifer nutzten die RCE, um Cloud-Metadaten-Endpunkte (wie
169.254.169.254) abzufragen, um IAM-Rollen und Datenbank-Credentials zu stehlen. - Persistente Hintertüren: Die Malware-Familien “SNOWLIGHT” und “COMPOOD” nutzten React2Shell, um dauerhafte Zugänge in Unternehmensnetzwerke zu etablieren.
Der Cloudflare-Vorfall
In einem bemerkenswerten “Kollateralschaden”-Ereignis erlebte Cloudflare im Dezember 2025 einen kurzen Ausfall. Die Ursache? Eine Notfall-Rollout von WAF-Maßnahmen, um fehlerhafte Flight-Payloads zu blockieren, war so aggressiv, dass sie legitimen React-Verkehr für Tausende von Websites versehentlich unterbrach.
6. Bin ich verwundbar? (Checkliste)
Wenn du eine React-basierte Anwendung betreibst, die zwischen Ende 2024 und Ende 2025 gebaut wurde, befindest du dich wahrscheinlich im Visier.
| Paket | Verwundbare Versionen | Gepatchte Versionen |
|---|---|---|
| React | 19.0.0 – 19.2.0 | 19.0.1, 19.1.2, 19.2.1+ |
| Next.js | 15.0.0 – 16.0.6 | 15.1.0, 16.0.7+ |
| react-server-dom-webpack | < 19.0.1 | 19.0.1+ |
Warnung: Canary- und Experimental-Builds von React (insbesondere nach 14.3.0-canary.77) sind ebenfalls hoch anfällig.
7. Erkennung & Gegenmaßnahmen
Sofortige Gegenmaßnahme: Der WAF-Schutz
Wenn du nicht sofort patchen kannst, ist deine erste Verteidigungslinie eine Web Application Firewall (WAF). Du solltest alle POST-Anfragen blockieren, die:
- Die Header
Next-Actionoderrsc-action-identhalten. - Die Zeichenkette
$@gefolgt von Property-Traversal-Markern wie:__proto__oder:constructorenthalten. - Ungewöhnlich komplexe
multipart/form-data-Strukturen, die an RSC-Endpunkte gerichtet sind.
Der dauerhafte Fix: Patchen
Deine Abhängigkeiten zu aktualisieren ist der einzige Weg, den “Geist” zu töten.
# Next.js aktualisieren
npm install next@latest react@latest react-dom@latest
# Überprüfe deine Lockfile auf folgende Pakete:
# react-server-dom-webpack
# react-server-dom-turbopack
Der Patch führt strenge hasOwnProperty-Checks ein und schützt den Flight-Decoder vor Objekt-Prototyp-Traversal.
Laufzeitüberwachung
Setze Tools wie Falco oder Sysdig ein, um verdächtige Prozesse in deinem Node.js-Laufzeitumfeld zu überwachen.
- Hinweis auf Kompromittierung (IoC): Node-Prozesse, die
sh,bash,curloderwgetspawnen. - Hinweis auf Kompromittierung (IoC): Unerwartete ausgehende Verbindungen zu bekannten C2-IPs oder Mining-Pools.
8. Lektionen für die Zukunft der React-Sicherheit
React2Shell ist ein Weckruf für die “Server-First”-Ära der Webentwicklung. Während wir mehr Logik zurück auf den Server durch RSC und Server Actions verlagern, führen wir alte Schwachstellen in neuen, abstrakteren Formen wieder ein.
Serialisierung ist niemals sicher: Jedes Protokoll, das komplexe Objekte aus Client-Input wieder zusammensetzt, ist ein massiver Angriffsvektor.
Sicherheit auf Framework-Ebene: Entwickler verlassen sich darauf, dass Frameworks standardmäßig sicher sind. Wenn das Framework selbst die Schwachstelle ist, sind herkömmliche Anwendungssicherheitsmaßnahmen (wie JWTs oder CSRF-Tokens) möglicherweise nicht ausreichend.
Der “Log4j”-Effekt: Moderne Web-Apps bauen auf einer tiefen Abhängigkeitskette auf. Ein Bug in einem Kern-Sub-Paket wie react-server-dom-webpack kann Millionen von nachgelagerten Anwendungen kompromittieren.
Fazit
React2Shell (CVE-2025-55182) wird als der Moment in Erinnerung bleiben, in dem die React-Community ihre erste große Sicherheitskrise auf Infrastrukturebene erlebte. Durch das Verständnis der Deserialisierungsmechanik des Flight-Protokolls können Sie sich besser gegen diesen “Geist” verteidigen und widerstandsfähigere Anwendungen bauen.
Haben Sie Ihre node_modules heute geprüft? Der Geist von RSC könnte noch in Ihren Deployments 2025 lauern.
Related InstaTunnel pages
Continue from this article into the most relevant product guides and workflows.
Related Topics
Keep building with InstaTunnel
Read the docs for implementation details or compare plans before you ship.