Proof of Concept für CVE-2025-55182 ("React2Shell"). Eine vollständig dockerisierte Umgebung, die Remote Code Execution (RCE) durch unsichere Deserialisierung in React Server Components demonstriert. Enthält anfällige Ziele für sowohl Vanilla React (Express) als auch Next.js, zusammen mit einem benutzerdefinierten Python-Exploit-Skript.
⚠️ HAFTUNGSAUSSCHLUSS: NUR ZU BILDUNGSZWECKEN Dieses Repository enthält funktionsfähigen Exploit-Code für eine kritische Sicherheitslücke (CVSS 10.0). Er ist ausschließlich für akademische Forschung, Sicherheitsanalysen und Bildungszwecke bestimmt. Verwenden Sie diesen Code nicht gegen Systeme, die Ihnen nicht gehören oder für die Sie keine ausdrückliche Erlaubnis zum Testen haben. Der Autor übernimmt keine Verantwortung für Missbrauch.
Dieses Projekt dokumentiert und demonstriert CVE-2025-55182, eine kritische Schwachstelle zur Remote-Codeausführung (RCE) in der React Server Components (RSC)-Architektur. Diese als „React2Shell“ bezeichnete Schwachstelle ermöglicht es nicht authentifizierten Remote-Angreifern, beliebigen Code auf dem Server auszuführen, indem sie das von react-server verwendete „Flight“-Serialisierungsprotokoll manipulieren.
Dieses Labor bietet eine kontrollierte, isolierte Docker-Umgebung zur Analyse der Schwachstelle in zwei verschiedenen Szenarien:
react-server-dom-webpack und Express.Die Umgebung wird über Docker Compose orchestriert und besteht aus drei isolierten Containern, die durch ein privates internes Netzwerk (research-net) verbunden sind.
| Dienst | Kontext | Beschreibung | Verwundbare Komponente |
|---|---|---|---|
vanilla-target | vanilla-rsc/ | Minimaler Express-Server, der das RSC-Protokoll manuell implementiert. | [email protected] |
nextjs-target | nextjs-app/ | Standard Next.js-Anwendung mit App Router. | [email protected] (impl. react-server) |
attacker | exploit/ | Python-Umgebung mit den Exploit-Skripten. | N/A |
Die Schwachstelle beruht auf unsicherer Deserialisierung (CWE-502) im Flight-Protokoll-Parser. Durch das Einschleusen einer manipulierten Multipart-Nutzlast mit einer „falschen“ Chunk-Struktur kann ein Angreifer:
.then-Eigenschaft eines promise-ähnlichen Objekts.$B-Blobs) zu durchlaufen.Function()-Konstruktor erreichen, um beliebiges JavaScript zu kompilieren und auszuführen (z. B. child_process.execSync).Repository klonen:
git clone https://github.com/trax69/cve-2025-55182-poc.git
cd cve-2025-55182-poc
Labor erstellen und starten:
docker-compose up -d --build
Warten Sie, bis die Container vollständig initialisiert sind. Der Next.js-Container kann einige Minuten für den ersten Build benötigen.
Die Exploit-Logik ist in exploit/exploit.py gekapselt. Sie können Angriffe von Ihrem Host-Rechner (falls Python installiert ist) oder direkt aus dem attacker-Container ausführen.
Auf die Angreifer-Shell zugreifen:
docker-compose exec attacker bash
Anforderungen installieren:
pip install -r requirements.txt
Angriff auf Ziel A (Vanilla React):
python exploit.py http://vanilla-target:4000/rsc vanilla
Angriff auf Ziel B (Next.js):
python exploit.py http://nextjs-target:3000/ nextjs
Der Exploit versucht, eine Datei namens pwned.txt im Verzeichnis /tmp des Zielservers zu erstellen. Zur Überprüfung:
# Vanilla-Server prüfen
docker-compose exec vanilla-target ls -la /tmp/pwned.txt
# Next.js-Server prüfen
docker-compose exec nextjs-target ls -la /tmp/pwned.txt
Bei Erfolg sehen Sie die Dateiauflistung. Wenn der Exploit fehlschlägt, ist die Datei nicht vorhanden.
Um diese Schwachstelle in Produktionsumgebungen zu beheben:
react-server-dom-webpack (und zugehörige Pakete) auf Version 19.0.1, 19.1.2 oder 19.2.1+."$1:__proto__" oder ungewöhnlichen Verwendungen von "$@" in Multipart-Bodies zu blockieren.Universitätsprojekt – Sicherheitsaudit & Schwachstellenforschung