
react CVE-2025-55182
Severity: Critical — CVSS 10.0
CWE: CWE-502 (Deserialization of Untrusted Data)
Vendor: Meta (Facebook)
Disclosed: December 3, 2025
CVE-2025-55182 is a maximum-severity unauthenticated remote code execution (RCE) vulnerability in React Server Components (RSC), dubbed React2Shell. The flaw lives in how React decodes payloads sent to React Server Function endpoints via the Flight protocol. An attacker can send a single, specially crafted HTTP POST request to a vulnerable server and execute arbitrary code — no credentials, no user interaction required.
Applications that do not expose explicit Server Function endpoints are still vulnerable if they support React Server Components.
| Package | Vulnerable Versions | Patched Versions |
|---|
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 |
Affected frameworks (when using vulnerable React packages): Next.js 15.x / 16.x (App Router), React Router, Waku, RedwoodSDK, Parcel RSC, Vite RSC plugin.
| Metric | Value |
|---|---|
| Attack Vector | Network |
| Attack Complexity | Low |
| Privileges Required | None |
| User Interaction | None |
| Scope | Changed |
| Confidentiality | High |
| Integrity | High |
| Availability | High |
| Overall Score | 10.0 (Critical) |
Vector string: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
React Server Components use a binary wire format called the Flight protocol to stream component trees from server to client. The same protocol handles Server Functions (formerly Server Actions) — callable endpoints that accept serialised arguments from the browser.
The vulnerability is in the deserialiser: when React processes a Flight payload it can be tricked into instantiating arbitrary server-side objects, leading to full RCE. Because the Flight endpoint is exposed by default whenever RSC is enabled, and because no authentication gate exists at the protocol level, exploitation requires only network access to the server.
The included template CVE-2025-55182.yaml uses three complementary detection methods.
Sends a minimal POST with Content-Type: text/x-component to the root path. A vulnerable (or reachable) RSC server responds with the same content-type and a Flight stream body whose rows begin with alphanumeric row IDs followed by a colon (e.g. 0:, 1:) or React reference sigils ($L, $S, $I, $@).
POST / HTTP/1.1
Content-Type: text/x-component
Accept: text/x-component, */*
Match condition: HTTP 200 + text/x-component header + Flight stream regex in body.
Next.js signals RSC requests via the RSC: 1 header and ?_rsc= query parameter. This request mimics a browser prefetch to confirm the App Router Flight endpoint is reachable.
GET /?_rsc=1 HTTP/1.1
Accept: text/x-component
RSC: 1
Next-Router-State-Tree: %5B%22%22%2C%7B%7D%5D
Match condition: HTTP 200 + text/x-component header.
Posts a minimal malformed Flight payload alongside a Next-Action header (the mechanism used to invoke Server Functions). A vulnerable server attempts to deserialise the payload; even an error response that includes RSC-specific headers confirms the endpoint exists.
POST / HTTP/1.1
Content-Type: text/x-component
Next-Action: 0000000000000000000000000000000000000000
Match condition: HTTP 200/400/500 + text/x-component or x-action-revalidated header.
Scans local *.json files (e.g. package-lock.json, yarn.lock) for the vulnerable package names combined with a version regex matching 19.0.0, 19.1.0, 19.1.1, or 19.2.0. Useful for auditing repositories or CI pipelines without sending any network traffic.
# 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
Upgrade immediately to a patched 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
Minimum safe versions per branch:
| Branch | Minimum Safe Version |
|---|---|
| 19.0.x | 19.0.1 |
| 19.1.x | 19.1.2 |
| 19.2.x | 19.2.1 |
Temporary mitigations (if upgrading is not immediately possible):
text/x-component content type on inbound POST requests (Google Cloud Armor rules are publicly available for this CVE).package-lock.json, node_modules, or an SBOM.This template is intended for authorised security testing and vulnerability assessment only. Running it against systems you do not own or have explicit written permission to test may be illegal. The authors accept no liability for misuse.