Vulnerabilities

7 min readUpdated

CVE-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.

CVETypeCVSSFixed react-server-dom-*
CVE-2025-55182Deserialisation RCE10.019.0.1 / 19.1.2 / 19.2.1
CVE-2025-55183Source-code exposure5.319.0.2 / 19.1.3 / 19.2.2
CVE-2025-55184Denial of service (infinite loop)7.519.0.2 / 19.1.3 / 19.2.2
CVE-2025-67779DoS (incomplete fix of 55184)7.519.0.3 / 19.1.4 / 19.2.3
CVE-2026-23864Multiple DoS7.519.0.4 / 19.1.5 / 19.2.4
CVE-2026-23869 / -23870 / -44907Further DoS (Apr–Jul 2026)7.5up 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 arrays9.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
Resolve the real versions (node commands checked with Node.js 22 on Debian 12)
# 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 next

05How 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.

Upgrade Next.js to the newest patch in your line
# 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.

LayerHelps withHonest limit
WAF / edge virtual patchFirst-wave scanning, malformed payloadsFlexible format; vendors say do not rely on it
Rate limiting at the proxySlows real-time exploit iterationA single successful request still lands
Upgrade React / Next.jsRemoves the unsafe deserialisationThe only complete fix
Secret rotationLimits damage from an exposed windowReactive, 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.

DateEvent
29 Nov 2025Lachlan Davidson reports the flaw via Meta Bug Bounty
3 Dec 2025Patches published; disclosed as CVE-2025-55182
3 Dec 2025Active exploitation observed within hours; AWS and others publish mitigations
5 Dec 2025Added to CISA KEV (now marked as used in ransomware campaigns)
11–12 Dec 2025Follow-up DoS and source-exposure CVEs disclosed
Jan–Jul 2026Further RSC denial-of-service CVEs and patch levels
14 Oct 2026New 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

If it uses the App Router with React Server Components on Next.js 15.x or 16.x (or 14.3.0-canary.77 and later canaries), yes, until patched. Next.js 13.x, stable 14.x, Pages Router apps and the Edge Runtime are not affected by the RCE. Check your installed Next.js version and upgrade to the fixed release in your line.

For a Next.js app, upgrade Next.js. Next.js bundles its own copy of the React server packages, so the Next.js version determines whether the fixed RSC code is present. Upgrading a separately installed react package does not change the vendored copy. For non-Next frameworks, upgrade both the framework and the react-server-dom-* packages.

Yes, if the app was reachable while unpatched. Vercel advised that any application online and unpatched as of 4 December 2025 should rotate the secrets it uses, starting with the most critical, because that window may have allowed code execution or data exposure. Rotation is reactive, so do it after upgrading and redeploying, in addition to patching rather than instead of it.

A WAF can drop obviously malformed deserialisation payloads and slow mass scanning, and hosting providers deployed temporary edge mitigations quickly. But the vendors told customers not to rely on those and to upgrade immediately, because the serialisation format is flexible and attackers refined their payloads against live targets. Treat edge filtering as cover while you patch.

It is a duplicate identifier Next.js opened to track the App Router impact of the same underlying React flaw. The CVE record was rejected as a duplicate of CVE-2025-55182. You do not need to address it separately — upgrading Next.js to a fixed release resolves both. The real fix is in the React Server Components code that Next.js bundles.

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.

  1. 01Critical Security Vulnerability in React Server Components · React
  2. 02Denial of Service and Source Code Exposure in React Server Components · React
  3. 03NVD — CVE-2025-55182 · NVD
  4. 04GHSA-fv66-9v8q-g76r — React Server Components RCE · GitHub Security Advisories
  5. 05Security Advisory: CVE-2025-66478 (Next.js) · Vercel / Next.js
  6. 06China-nexus threat groups rapidly exploit React2Shell · AWS Security
  7. 07GHSA-xqc2-xf4c-x3h3 — Unauthenticated Remote Code Execution in React Server Components (October 2026) · GitHub Security Advisories
  8. 08GHSA-673q-mjm6-r5xr — Unauthenticated RCE in use cache functions returning typed arrays (Next.js) · GitHub Security Advisories
  9. 09CISA KEV catalogue · CISA

Last updated