Vulnerabilities
7 min readUpdatedCVE-2025-55182 (React2Shell): RSC deserialisation RCE
Quick answer
CVE-2025-55182, nicknamed React2Shell, is an unauthenticated remote code execution flaw in React Server Components. React's Flight protocol unsafely deserialised payloads sent to Server Function endpoints, so a single crafted HTTP request could run code on the server. It scored CVSS 10.0, was disclosed on 3 December 2025, and is in CISA's Known Exploited Vulnerabilities catalogue. It affects react-server-dom-* 19.0.0, 19.1.0, 19.1.1 and 19.2.0 and, because Next.js bundles them, Next.js 15.x and 16.x App Router apps. Patch immediately.
At a glance
critical severity- Identifier
- CVE-2025-55182
- Also known as
- React2Shell
- Product
- React Server Components (react-server-dom-webpack / -parcel / -turbopack); Next.js App Router
- Affected
- react-server-dom-* 19.0.0, 19.1.0, 19.1.1, 19.2.0; Next.js 15.x, 16.x and 14.3.0-canary.77+ (App Router)
- Fixed in
- 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
- CVSS
- 10.0 (CVSS 3.1, Meta as CNA)
- Disclosed
- Known exploited (CISA KEV)
- Yes
In CISA KEV (added 5 Dec 2025), marked as used in ransomware campaigns. Exploitation attempts by multiple threat groups began within hours of disclosure.
01What is CVE-2025-55182?
CVE-2025-55182, called React2Shell, is an unauthenticated remote code execution flaw in React Server Components (RSC). RSC lets a browser call functions that run on the server; React translates those calls into HTTP requests and, on the server, deserialises the request body back into a function call using its internal Flight protocol. The decoder did not safely validate what it was decoding, so an attacker could send a crafted request to any Server Function endpoint and have the server execute attacker-influenced behaviour — in the worst case, arbitrary code.
It needs no account and no user interaction: a single HTTP request to a reachable Server Function endpoint is enough. React rated it CVSS 10.0, and it was added to CISA's Known Exploited Vulnerabilities catalogue two days after disclosure; the catalogue now marks it as used in ransomware campaigns. The identifier CVE-2025-66478 was opened for the Next.js-specific impact and later rejected as a duplicate of CVE-2025-55182.
02Affected versions and the follow-ups
The vulnerable code is in the React server packages, but most teams consume them through Next.js, so the Next.js version is usually what decides exposure. As with Log4Shell, researchers probing the first patch found more issues, so a cluster of follow-up CVEs landed over the following weeks — several denial-of-service bugs and one source-code-exposure bug — and in October 2026 a second remote-code-execution advisory. Keep moving to the latest patch in your line rather than stopping at the first fix.
| CVE | Type | CVSS | Fixed react-server-dom-* |
|---|---|---|---|
| CVE-2025-55182 | Deserialisation RCE | 10.0 | 19.0.1 / 19.1.2 / 19.2.1 |
| CVE-2025-55183 | Source-code exposure | 5.3 | 19.0.2 / 19.1.3 / 19.2.2 |
| CVE-2025-55184 | Denial of service (infinite loop) | 7.5 | 19.0.2 / 19.1.3 / 19.2.2 |
| CVE-2025-67779 | DoS (incomplete fix of 55184) | 7.5 | 19.0.3 / 19.1.4 / 19.2.3 |
| CVE-2026-23864 | Multiple DoS | 7.5 | 19.0.4 / 19.1.5 / 19.2.4 |
| CVE-2026-23869 / -23870 / -44907 | Further DoS (Apr–Jul 2026) | 7.5 | up to 19.0.8 / 19.1.9 / 19.2.8 |
| GHSA-xqc2-xf4c-x3h3 (Oct 2026, no CVE yet) | RCE in rare cases with typed arrays | 9.5 (CVSS 4.0) | 19.0.9 / 19.1.10 / 19.2.9 / 19.3.1 |
03How an attack works, conceptually
React Server Functions expose endpoints that accept a serialised payload describing the call. The Flight decoder reconstructed objects from that payload without sufficiently validating them, so a crafted body could steer the server into executing code rather than simply handling data. No valid Server Function call, authentication or specific route was required beyond reaching an endpoint that the framework exposes.
Observed exploitation matched the theory. Within hours of disclosure, Amazon's threat-intelligence teams reported exploitation attempts by multiple China state-nexus groups. One cluster spent nearly an hour refining its attempts against a live target — running reconnaissance commands such as whoami and id, trying to write a marker file to /tmp and to read /etc/passwd. The common thread was speed: public details were minimal, but the vulnerability class was understood quickly enough to exploit the same day.
04How to check your installed versions
Check the resolved versions, not the ranges in package.json, because a caret range can resolve to a vulnerable build. For Next.js apps the critical detail is that Next.js vendors its own copy of the React server packages inside the framework, so the installed Next.js version — not a separately installed react-server-dom-* — is what matters. Upgrading Next.js is how you get the fixed RSC code.
- Next.js App Router with React Server Components is the main exposure; Next.js 13.x, stable 14.x, Pages Router applications and the Edge Runtime are not affected by the RCE
- Upgrade Next.js to the latest patch in your line rather than bumping React directly; 15.5.7 and 16.0.7 were only the first fixed releases
- React Router, Waku, Parcel RSC, the Vite RSC plugin and Redwood SDK also bundle the affected packages — update those too
- After patching and redeploying, rotate application secrets, since an unpatched window may have exposed them
# What is actually installed
npm ls next react react-dom react-server-dom-webpack 2>/dev/null
node -p "require('next/package.json').version"
# Read every copy straight from the lockfile (lockfileVersion 2 or 3)
node -e 'const l=require("./package-lock.json");
for (const [k,v] of Object.entries(l.packages||{}))
if (/node_modules\/(next|react-server-dom-[a-z]+)$/.test(k))
console.log(k, v.version)'
# yarn / pnpm equivalents
yarn why next # or: pnpm why next05How to fix it
Upgrade to a patched release and redeploy. For React consumers the first fixes were 19.0.1, 19.1.2 and 19.2.1; as of October 2026 the minimum covering every advisory in the table is 19.0.9, 19.1.10, 19.2.9 or 19.3.1. For Next.js, the first fixed releases were 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7 and 16.0.7, but later advisories need newer builds — Next.js 16.4.1, for example, fixed a related October 2026 typed-array RCE in 'use cache' functions — so install the newest patch of your line. Vercel also published an interactive helper, fix-react2shell-next, that checks versions and performs the bump. There is no safe workaround that leaves the vulnerable code running.
# A partial version is a range: npm installs the highest matching release.
npm install [email protected] # newest 15.5.x
npm install next@16 # newest 16.x
# Or run Vercel's guided checker/updater (published for this CVE)
npx fix-react2shell-next
# Then redeploy and rotate secrets.06What virtual patching at the edge can and cannot do
React worked with several hosting providers to deploy temporary mitigations before disclosure, and CDN and cloud operators such as AWS shipped managed WAF rules. A WAF in front of Server Function endpoints can drop obviously malformed deserialisation payloads and rate-limit probing, and a proxy such as GuardX can absorb the burst of scanning that follows a disclosure of this magnitude.
But the vendors were explicit: do not depend on these mitigations, upgrade immediately. Virtual patching is pattern-matching against a serialisation format that is designed to be flexible, and AWS observed attackers actively debugging and refining their payloads against live targets. Edge filtering narrows the window and slows mass exploitation; it does not make an unpatched server safe. Treat it as cover during the upgrade, exactly as with Log4Shell.
| Layer | Helps with | Honest limit |
|---|---|---|
| WAF / edge virtual patch | First-wave scanning, malformed payloads | Flexible format; vendors say do not rely on it |
| Rate limiting at the proxy | Slows real-time exploit iteration | A single successful request still lands |
| Upgrade React / Next.js | Removes the unsafe deserialisation | The only complete fix |
| Secret rotation | Limits damage from an exposed window | Reactive, not preventative |
07Disclosure and exploitation timeline
The speed is the headline: a critical deserialisation bug in a widely used framework was exploited the same day it was disclosed. If you run an RSC app, keep protection always on and your dependency inventory current, because the gap between disclosure and mass exploitation is now measured in hours, not weeks.
| Date | Event |
|---|---|
| 29 Nov 2025 | Lachlan Davidson reports the flaw via Meta Bug Bounty |
| 3 Dec 2025 | Patches published; disclosed as CVE-2025-55182 |
| 3 Dec 2025 | Active exploitation observed within hours; AWS and others publish mitigations |
| 5 Dec 2025 | Added to CISA KEV (now marked as used in ransomware campaigns) |
| 11–12 Dec 2025 | Follow-up DoS and source-exposure CVEs disclosed |
| Jan–Jul 2026 | Further RSC denial-of-service CVEs and patch levels |
| 14 Oct 2026 | New RSC RCE advisory (typed arrays) fixed in 19.0.9 / 19.1.10 / 19.2.9 / 19.3.1; related Next.js 'use cache' RCE fixed in 16.4.1 |
Questions
Frequently asked questions
Sources
Sources and verification
The node -p and lockfile-parsing commands were run against a synthetic project with Node.js 22.23 on Debian 12, October 2026; the npm range syntax was checked with npm's own npm-package-arg parser. npm, npx, yarn and pnpm commands were not executed on the test host and are shown as documented by their vendors. No exploit was run.
- 01Critical Security Vulnerability in React Server Components · React
- 02Denial of Service and Source Code Exposure in React Server Components · React
- 03NVD — CVE-2025-55182 · NVD
- 04GHSA-fv66-9v8q-g76r — React Server Components RCE · GitHub Security Advisories
- 05Security Advisory: CVE-2025-66478 (Next.js) · Vercel / Next.js
- 06China-nexus threat groups rapidly exploit React2Shell · AWS Security
- 07GHSA-xqc2-xf4c-x3h3 — Unauthenticated Remote Code Execution in React Server Components (October 2026) · GitHub Security Advisories
- 08GHSA-673q-mjm6-r5xr — Unauthenticated RCE in use cache functions returning typed arrays (Next.js) · GitHub Security Advisories
- 09CISA KEV catalogue · CISA
Last updated