
Beratung und Analyse zu CVE-2025-55182 (React2Shell), RCE durch RSC-Flight-Deserialisierung, mit Ursachenanalyse, Angriffsablauf, Patch-Diff und Sigma-/Suricata-/WAF-Erkennungsregeln.
Letzte Überprüfung: 2026-11-04 (KST). Alle Zahlenwerte wurden ausschließlich aus den Quellen in den untenstehenden References übernommen; bei abweichenden Werten zwischen den Quellen wurden alle Werte nebeneinander angegeben.
Function-Konstruktor gelangen und beliebiges JavaScript ausführen kann.react-server-dom-webpack / -parcel / -turbopack 19.0.0, 19.1.0, 19.1.1, 19.2.0 sowie Frameworks, die diese verwenden – insbesondere Next.js 15.x / 16.x App Router. Auch ohne selbst eine Server Function zu definieren, ist man betroffen, sofern nur RSC unterstützt wird.| Element | Inhalt |
|---|---|
| CVE-ID | CVE-2025-55182 (React) / CVE-2025-66478 für Next.js wurde als Duplikat abgelehnt (Rejected) |
| Alias | React2Shell |
| Veröffentlichungsdatum | 2025-12-03 (React-Team-Empfehlung, Patch am selben Tag veröffentlicht) |
| Entdecker | Lachlan Davidson (gemeldet am 2025-11-29 über Meta Bug Bounty) |
| Betroffene Produkte/Versionen | react-server-dom-webpack, react-server-dom-parcel, react-server-dom-turbopack 19.0.0, 19.1.0, 19.1.1, 19.2.0 / Next.js 14.3.0-canary.77 und höhere Canaries, 15.x, 16.x (App Router) |
| Patch-Versionen | RCE-Fix: React 19.0.1 / 19.1.2 / 19.2.1, Next.js 15.0.5 / 15.1.9 / 15.2.6 / 15.3.6 / 15.4.8 / 15.5.7 / 16.0.7 Empfohlene endgültige Versionen (einschließlich Folge-Schwachstellen): React 19.0.3 / 19.1.4 / 19.2.3 (siehe „Folge-Schwachstellen“ unten) |
| CVSS v3.1 | 10.0 Critical — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| CVSS v4.0 | Zum Zeitpunkt der Erstellung dieses Dokuments nicht aus Primärquellen bestätigt |
| CWE | CWE-502 Deserialization of Untrusted Data (Vercel GHSA-9qr9-h5gf-34mp, GitLab Advisory DB). Im CISA-KEV-Eintrag ist kein CWE angegeben |
| Tatsächliche Ausnutzung | Ausnutzung bestätigt. Aufnahme in CISA KEV am 2025-12-05, Frist für Bundesbehörden 2025-12-12, Verwendung in Ransomware-Kampagnen: Known. AWS beobachtete Ausnutzungsversuche innerhalb weniger Stunden nach Veröffentlichung |
| Komponente | Betroffene Versionen | Behobene Version |
|---|---|---|
react-server-dom-webpack / -parcel / -turbopack | 19.0.0 | 19.0.1 (empfohlen 19.0.3) |
| 〃 | 19.1.0, 19.1.1 | 19.1.2 (empfohlen 19.1.4) |
| 〃 | 19.2.0 | 19.2.1 (empfohlen 19.2.3) |
| Next.js 15.x (App Router) | 15.0 ~ vor 15.5-Patch | 15.0.5 / 15.1.9 / 15.2.6 / 15.3.6 / 15.4.8 / 15.5.7 |
| Next.js 16.x (App Router) | unter 16.0.7 | 16.0.7 |
| Next.js canary | ab 14.3.0-canary.77 | 15.6.0-canary.58 / 16.1.0-canary.12 (Nutzer von 14.3 canary sollten auf 14.x stable downgraden) |
| Sonstige RSC-Integrationswerkzeuge | React Router (unstable RSC API), Waku, Parcel RSC Plugin, Vite RSC Plugin (@vitejs/plugin-rsc), RedwoodSDK, Expo usw. | Jeweils neueste Version des Werkzeugs + gepatchtes react-server-dom-* |
Nicht betroffen: reine Client-React-Apps ohne Server, Next.js 13.x / 14.x stable, Pages-Router-Apps, Edge-Runtime-Deployments.
Nach dem React2Shell-Patch wurden durch weitere Forschung zu RSC nacheinander Verwundbarkeiten veröffentlicht, die kein RCE sind. Das RCE selbst wurde in 19.0.1 / 19.1.2 / 19.2.1 behoben, doch um auch die folgenden Verwundbarkeiten zu verhindern, ist die neueste Version erforderlich.
| CVE | Typ | CVSS v3.1 | Veröffentlicht | Behobene Version |
|---|---|---|---|---|
| CVE-2025-55184 | Denial of Service (DoS) | 7.5 | 2025-12-11 | 19.0.2 / 19.1.3 / 19.2.2 (unvollständig) |
| CVE-2025-55183 | Offenlegung von Quellcode | 5.3 | 2025-12-11 | 19.0.2 / 19.1.3 / 19.2.2 |
| CVE-2025-67779 | DoS durch unvollständigen Patch von CVE-2025-55184 | 7.5 | 2025-12-12 | 19.0.3 / 19.1.4 / 19.2.3 |
Einige Artikel von Sicherheitsanbietern (z. B. das Zscaler-Update) formulieren, dass „der ursprüngliche Patch von CVE-2025-55182 unvollständig war". Gemäß den React- und GitLab-Empfehlungen war jedoch die DoS-Korrektur (CVE-2025-55184) unvollständig, und es konnte keine Primärquelle bestätigt werden, dass die RCE-Korrektur umgangen wurde. In jedem Fall ist die empfohlene Maßnahme Version 19.0.3 / 19.1.4 / 19.2.3 oder höher.
| Datum | Ereignis |
|---|---|
| 2025-11-29 | Meldung durch Lachlan Davidson über Meta Bug Bounty |
| 2025-11-30 | Bestätigung durch Meta-Sicherheitsforscher, Beginn der Korrektur mit dem React-Team |
| 2025-12-03 | Veröffentlichung der React-Empfehlung und Patches (19.0.1 / 19.1.2 / 19.2.1) sowie der Next.js-Empfehlung (CVE-2025-66478). Cloud- und WAF-Anbieter erhielten vorab Informationen und verteilten Schutzregeln |
| 2025-12-03 ~ 04 | AWS beobachtete innerhalb weniger Stunden nach Veröffentlichung Ausnutzungsversuche durch mit China verbundene Gruppen (Earth Lamia, Jackpot Panda). Zscaler beobachtete in den ersten zwei Stunden über 4.100 Ausnutzungsversuche |
| 2025-12-05 | Aufnahme in CISA KEV (Frist 12-12). Microsoft erkannte ab diesem Tag tatsächliche Ausnutzungsaktivitäten |
| 2025-12-11 | Veröffentlichung der Folge-Schwachstellen CVE-2025-55184 / 55183 |
| 2025-12-12 | Veröffentlichung von CVE-2025-67779 (unvollständiger Patch), Verteilung von 19.0.3 / 19.1.4 / 19.2.3 |
| 2025-12-15 | Microsoft veröffentlicht Analyse der Aktivitäten nach der Ausnutzung und einen Hunting-Leitfaden |
RSC tauscht Daten zwischen Client und Server über ein eigenes Serialisierungsprotokoll namens Flight aus. Wenn der Client eine Server Function aufruft, sendet der Browser die Argumente als multipart/form-data-POST-Anfrage, wobei jedes Formularfeld zu einem nummerierten Chunk wird.
$<id> ist eine Wertreferenz auf einen anderen Chunk, $@<id> ist eine Referenz auf das Chunk-Objekt selbst, $B<id> ist die Blob-Verarbeitung.then()-Methode. JavaScripts await ruft bei einem thenable then() auf, und wenn das Ergebnis wieder ein thenable ist, wird dies rekursiv fortgesetzt.getOutlinedModel()Der serverseitige Flight-Antwort-Handler (packages/react-server/src/ReactFlightReplyServer.js) teilt in getOutlinedModel() Referenzen der Form $<id>:<prop1>:<prop2> anhand von : auf und folgt dabei den Eigenschaften im Ziel-Chunk in der Reihenfolge chunk[prop1][prop2].
Dabei wurde nicht geprüft, ob der Eigenschaftsname eine eigene Eigenschaft (own property) des Objekts ist. Daher konnten auch über Namen wie __proto__, constructor und prototype vererbte Eigenschaften erreicht werden.