
RCE-Exploit-Toolkit für CVE-2025-55182 und CVE-2025-66478 in React Server Components. Enthält mehrere Exploit-Varianten, Erkennungsskripte, einen verwundbaren Testserver und eine tiefgehende technische Analyse der Flight-Protokoll-Deserialisierungsschwachstelle.
CVE-2025-55182 (React) und CVE-2025-66478 (Next.js)
Dieses Repository enthält Exploit‑Code, der ausschließlich für autorisierte Sicherheitstests und zu Bildungszwecken bestimmt ist.
Siehe auch: Mehrere Forscher haben Analysen dieser Schwachstelle veröffentlicht. Im Abschnitt Referenzen finden Sie zusätzliche Perspektiven, Exploit‑Techniken und Erkennungsmethoden.
Am Mittwoch, dem 3. Dezember 2025, wurde eine kritische Remote‑Code‑Ausführung‑Schwachstelle in React Server Components öffentlich bekannt gegeben. Der Fehler mit dem Namen „React2Shell“ ermöglicht es einem nicht authentifizierten Angreifer, beliebigen Code auf jedem Server auszuführen, der verwundbare Versionen von React RSC oder dem Next.js App Router verwendet – und zwar durch das Senden einer einzigen HTTP‑Anfrage.
Angesichts der weiten Verbreitung von Next.js – es betreibt einen erheblichen Teil des modernen Webs – sind die Auswirkungen dieser Schwachstelle schwerwiegend. Jede Next.js‑Anwendung, die den App Router (seit Next.js 13 der Standard für neue Projekte) mit aktiviertem RSC verwendet, ist verwundbar. Keine besondere Konfiguration. Keine spezifischen Endpunkte. Einfach eine POST‑Anfrage an eine beliebige Route.
Die Schwachstelle liegt im „Flight“‑Protokoll von React, dem Serialisierungsformat, das zum Übertragen von Daten zwischen Server und Client in React Server Components verwendet wird. Eine fehlende hasOwnProperty‑Prüfung während der Deserialisierung ermöglicht eine Traversierung der Prototypenkette, die schließlich den JavaScript-Function‑Konstruktor erreicht, um vom Angreifer kontrollierten Code auszuführen.
Der Fehler existiert in den Paketen react-server-dom-webpack, react-server-dom-turbopack und react-server-dom-parcel von React. Next.js als der dominierende RSC‑Konsument erbt die Schwachstelle durch seinen App Router.
Viele Dienste sind potenziell verwundbar. Next.js ist eines der beliebtesten React‑Frameworks und wird von Unternehmen jeder Größe eingesetzt – von Startups bis zu Großunternehmen. Der App Router mit React Server Components ist seit Version 13 die Standardarchitektur für neue Next.js‑Projekte, daher sind die meisten modernen Next.js‑Bereitstellungen betroffen.
Jede Anwendung, die Folgendes verwendet:
react-server-dom-*‑Paketen (19.0.0 – 19.2.0)Dies umfasst Produktionsbereitstellungen auf Vercel, AWS, selbst gehosteter Infrastruktur und überall dort, wo Next.js App Router‑Anwendungen ausgeführt werden.
Nicht betroffen:
process.mainModule verfügbar)| Paket | Verwundbar | Behoben |
|---|---|---|
react-server-dom-webpack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1+ |
react-server-dom-turbopack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1+ |
react-server-dom-parcel | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1+ |
| Version | Verwundbar | Behoben |
|---|---|---|
| 15.0.x | < 15.0.5 | 15.0.5+ |
| 15.1.x | < 15.1.9 | 15.1.9+ |
| 15.2.x | < 15.2.6 | 15.2.6+ |
| 15.3.x | < 15.3.6 | 15.3.6+ |
| 15.4.x | < 15.4.8 | 15.4.8+ |
| 15.5.x | < 15.5.7 | 15.5.7+ |
| 16.0.x | < 16.0.7 | 16.0.7+ |
Sofort aktualisieren. Es gibt keine Workarounds.
Für Next.js‑Anwendungen:
npm install next@latest
# oder
pnpm update next
Für die direkte Nutzung von React RSC:
npm install react-server-dom-webpack@latest
Überprüfen Sie Ihre installierten Versionen:
npm ls next react-server-dom-webpack react-server-dom-turbopack
Es wurden mehrere Angriffsvektoren für diese Schwachstelle entdeckt. Der häufigste – und derjenige, der ohne Voraussetzungen funktioniert – nutzt Prototyp‑Verschmutzung über das Flight‑Protokoll‑Referenzsystem von React.
Der Exploit sendet eine maßgeschneiderte Multipart‑POST‑Anfrage mit einem Next‑Action‑Header. Die Payload missbraucht das Referenzsystem, um:
$1:__proto__:then zu traversierenFunction‑Konstruktor aufzurufenPOST / HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----Boundary
Next-Action: x
------Boundary
Content-Disposition: form-data; name="0"
{"then":"$1:__proto__:then","status":"resolved_model","value":"{...}","_response":{...}}
------Boundary
Content-Disposition: form-data; name="1"
"$@0"
------Boundary--
Der Code wird während der Deserialisierung ausgeführt, bevor eine Validierung der Aktions‑ID erfolgt. Das bedeutet, dass jeder Next‑Action‑Header‑Wert den verwundbaren Codepfad auslöst – es ist keine gültige Aktions‑ID erforderlich.
Andere Angriffsvektoren existieren, darunter
$F‑Funktionsreferenzen und direkte Modul‑Gadgets. Diese erfordern in der Regel eine gültige Aktions‑ID. Siehe Alternative Angriffsvektoren für Details.
Das Flight‑Protokoll von React löst Referenzen wie $1:path:to:value auf, indem es an Doppelpunkten trennt und das Objekt traversiert:
// ReactFlightReplyServer.js - getOutlinedModel()
for (let i = 1; i < path.length; i++) {
value = value[path[i]]; // No hasOwnProperty check!
}
Die Ironie: Ganz oben in derselben Datei, Zeile 35:
import hasOwnProperty from 'shared/hasOwnProperty';Die Absicherung wurde importiert. Sie war verfügbar. Sie wurde nur nicht in der einen Schleife verwendet, in der sie am wichtigsten gewesen wäre.
Diese einzelne fehlende Prüfung erlaubt es, mit $1:__proto__:then von einem Chunk‑Objekt aus die Prototypenkette hinauf zu Chunk.prototype.then zu gelangen – einer Funktion, die Promise‑ähnliche Objekte verarbeitet. Indem ein gefälschter Chunk mit den richtigen Eigenschaften erstellt wird, wird kontrolliert, welcher Code ausgeführt wird.
Klonen Sie den verwundbaren Testserver:
git clone https://github.com/freeqaz/react2shell
cd react2shell/vulnerable-next-server
pnpm install
pnpm dev
In einem anderen Terminal:
./detect.sh http://localhost:3443
Ein verwundbarer Server antwortet mit HTTP 500 und E{"digest" im Antworttext. Um RCE zu demonstrieren:
./exploit-redirect.sh http://localhost:3443 "id"
Die Befehlsausgabe erscheint in der Antwort. Für interaktive Erkundung:
./shell.sh http://localhost:3443
Das Verzeichnis vulnerable-next-server/ enthält eine vorkonfigurierte Next.js‑16.0.6‑Anwendung mit React 19.2.0 für sicheres lokales Testen. Sie läuft standardmäßig auf Port 3443. Es handelt sich um eine minimale App‑Router‑Einrichtung, die demonstriert, dass Standardkonfigurationen verwundbar sind.
Wir haben mehrere Exploit‑Varianten entwickelt, um verschiedene Szenarien abzudecken: