
react CVE-2025-55182
Schweregrad: Kritisch — CVSS 10.0
CWE: CWE-502 (Deserialisierung nicht vertrauenswürdiger Daten)
Anbieter: Meta (Facebook)
Offengelegt: 3. Dezember 2025
CVE-2025-55182 ist eine nicht authentifizierte Sicherheitslücke zur Remote-Codeausführung (RCE) mit maximalem Schweregrad in React Server Components (RSC), genannt React2Shell. Der Fehler liegt in der Art und Weise, wie React Payloads decodiert, die über das Flight-Protokoll an React-Server-Function-Endpunkte gesendet werden. Ein Angreifer kann eine einzige, speziell präparierte HTTP-POST-Anfrage an einen verwundbaren Server senden und beliebigen Code ausführen – keine Anmeldeinformationen, keine Benutzerinteraktion erforderlich.
Anwendungen, die keine expliziten Server-Function-Endpunkte bereitstellen, sind dennoch anfällig, wenn sie React Server Components unterstützen.
| Paket | Verwundbare Versionen | Patch-Versionen |
|---|---|---|
react-server-dom-webpack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
react-server-dom-parcel | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
react-server-dom-turbopack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | ≥ 19.0.1 / 19.1.2 / 19.2.1 |
Betroffene Frameworks (bei Verwendung verwundbarer React-Pakete): Next.js 15.x / 16.x (App Router), React Router, Waku, RedwoodSDK, Parcel RSC, Vite RSC plugin.
| Metrik | Wert |
|---|---|
| Angriffsvektor | Network |
| Angriffskomplexität | Low |
| Erforderliche Privilegien | None |
| Benutzerinteraktion | None |
| Umfang | Changed |
| Vertraulichkeit | High |
| Integrität | High |
| Verfügbarkeit | High |
| Gesamtbewertung | 10.0 (Critical) |
Vektorstring: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
React Server Components verwenden ein binäres Drahtformat namens Flight-Protokoll, um Komponentenbäume vom Server zum Client zu streamen. Dasselbe Protokoll behandelt Server Functions (früher Server Actions) – aufrufbare Endpunkte, die serialisierte Argumente vom Browser akzeptieren.
Die Sicherheitslücke liegt im Deserialisierer: Wenn React eine Flight-Payload verarbeitet, kann es dazu gebracht werden, beliebige serverseitige Objekte zu instanziieren, was zu vollständiger RCE führt. Da der Flight-Endpunkt standardmäßig verfügbar ist, sobald RSC aktiviert ist, und auf Protokollebene keine Authentifizierung existiert, ist für die Ausnutzung lediglich Netzwerkzugriff auf den Server erforderlich.
Die enthaltene Vorlage CVE-2025-55182.yaml verwendet drei komplementäre Erkennungsmethoden.
Sendet ein minimales POST mit Content-Type: text/x-component an den Root-Pfad. Ein verwundbarer (oder erreichbarer) RSC-Server antwortet mit demselben Content-Type und einem Flight-Stream-Body, dessen Zeilen mit alphanumerischen Zeilen-IDs gefolgt von einem Doppelpunkt (z. B. 0:, 1:) oder React-Referenzsiglen ($L, $S, $I, $@) beginnen.
POST / HTTP/1.1
Content-Type: text/x-component
Accept: text/x-component, */*
Übereinstimmungsbedingung: HTTP 200 + text/x-component-Header + Flight-Stream-Regex im Body.
Next.js signalisiert RSC-Anfragen über den RSC: 1-Header und den ?_rsc=-Abfrageparameter. Diese Anfrage simuliert einen Browser-Prefetch, um zu bestätigen, dass der App-Router-Flight-Endpunkt erreichbar ist.
GET /?_rsc=1 HTTP/1.1
Accept: text/x-component
RSC: 1
Next-Router-State-Tree: %5B%22%22%2C%7B%7D%5D
Übereinstimmungsbedingung: HTTP 200 + text/x-component-Header.
Sendet eine minimale fehlerhafte Flight-Payload zusammen mit einem Next-Action-Header (dem Mechanismus zur Verwendung von Server Functions). Ein verwundbarer Server versucht, die Payload zu deserialisieren; selbst eine Fehlerantwort, die RSC-spezifische Header enthält, bestätigt die Existenz des Endpunkts.
POST / HTTP/1.1
Content-Type: text/x-component
Next-Action: 0000000000000000000000000000000000000000
Übereinstimmungsbedingung: HTTP 200/400/500 + text/x-component- oder x-action-revalidated-Header.
Scannt lokale *.json-Dateien (z. B. package-lock.json, yarn.lock) nach den verwundbaren Paketnamen in Kombination mit einem Versions-Regex, der auf 19.0.0, 19.1.0, 19.1.1 oder 19.2.0 passt. Nützlich für die Überprüfung von Repositorys oder CI-Pipelines ohne Netzwerkverkehr.
# Install / update Nuclei
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
nuclei -target CVE-2025-55182.yaml -u https://target.example.com
nuclei -target CVE-2025-55182.yaml -l targets.txt
nuclei -target CVE-2025-55182.yaml -target ./path/to/project
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -v -je results.json
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -rl 10 -timeout 10
Sofort aktualisieren auf eine gepatchte Version:
# npm
npm install react-server-dom-webpack@latest
# yarn
yarn upgrade react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
# pnpm
pnpm update react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
Mindestsichere Versionen pro Zweig:
| Zweig | Mindestsichere Version |
|---|---|
| 19.0.x | 19.0.1 |
| 19.1.x | 19.1.2 |
| 19.2.x | 19.2.1 |
Temporäre Abhilfemaßnahmen (falls eine Aktualisierung nicht sofort möglich ist):
text/x-component bei eingehenden POST-Anfragen abzielt (Google Cloud Armor-Regeln sind für diese CVE öffentlich verfügbar).package-lock.json, node_modules oder einer SBOM.