
Proof-of-Concept-Exploit für CVE-2025-55182, eine kritische RCE-Sicherheitslücke in Next.js Server Actions. Nutzt unsichere Deserialisierung im React Flight-Protokoll aus, um über Prototyp-Verschmutzung (prototype pollution) und Sandbox-Umgehung (sandbox bypass) beliebige Befehle auszuführen.
Ein Proof-of-Concept (PoC)-Skript für React2Shell (CVE-2025-55182), eine kritische Schwachstelle zur Remotecodeausführung (RCE), die Next.js-Anwendungen mit Server Actions betrifft.
[!WARNING] Haftungsausschluss: Dieses Tool dient nur zu Bildungs- und autorisierten Testzwecken. Ich übernehme keine Verantwortung für Missbrauch.
Dieses Skript nutzt eine unsichere Deserialisierungsschwachstelle im „Flight“-Protokoll der React Server Components aus. Es ermöglicht nicht authentifizierten Angreifern, beliebigen JavaScript-Code auf dem Server auszuführen, was zu einer teilweisen Remote Code Execution (RCE) führt.
require zu finden (global.require oder über den Modulkonstruktor), und stellt sicher, dass es auf modernen Node.js-Versionen (v14+) funktioniert.pip install -r requirements.txt
python3 react2shell.py -u <TARGET_URL> [-c <COMMAND>]
Benutzeridentität überprüfen:
python3 react2shell.py -u http://127.0.0.1:3000/
Verzeichnisinhalt auflisten:
python3 react2shell.py -u http://127.0.0.1:3000/ -c "ls -la"
Eine sensible Datei lesen:
python3 react2shell.py -u http://127.0.0.1:3000/ -c "cat /etc/passwd"
Der Exploit nutzt eine Prototype Pollution- und Insecure Deserialization-Kette innerhalb der Next.js Server Actions-Verarbeitung von React Server Components (RSC).
Next-Action-Header signalisiert dem Server, eine Server Action zu verarbeiten.then-Eigenschaft ("$1:__proto__:then"). Dadurch wird der asynchrone Request-Handler des Servers dazu verleitet, die Payload als „Thenable“ (Promise-ähnliches Objekt) zu behandeln._response-Objekt. Das _prefix-Feld wird normalerweise für internes Stream-Buffering verwendet, aber durch Manipulation können wir rohen JavaScript-Code injizieren.require-Funktion oft aus dem globalen Scope entfernt, um RCE zu verhindern. Das Skript umgeht dies, indem es die process.mainModule-Prototypkette durchläuft:
var require = global.require || global.process.mainModule.constructor._load;
child_process importieren und Systembefehle ausführen können.Dieses Tool wurde mit Unterstützung von Gemini 3 Pro entwickelt.
| Argument | Beschreibung | Standard |
|---|
-u, --url | Erforderlich. Die Ziel-URL (z.B. http://localhost:3000/). | N/A |
-c, --cmd | Optional. Der auf dem Server auszuführende Befehl. | id |
execSync