CVE-2025-55182 (React2Shell): which versions are affected and how to fix it

CVE-2025-55182, or React2Shell, is a remote code execution flaw in React Server Components, rated CVSS 10.0 and exploited in the wild. One request with no login can run code on the server of an unpatched Next.js 15 or 16 App Router app, or any framework on React server packages 19.0.0, 19.1.0, 19.1.1 or 19.2.0. Upgrade to Next.js 16.4.5 or 15.5.29, then rotate secrets if the app ran unpatched after December 4, 2025.

The team behind Keybrum's attacksUpdated 10 min read
CVE-2025-55182React2Shellcritical · CVSS 10.0
Component
React Server Components (react-server-dom-webpack, -parcel, -turbopack) and the Next.js App Router (next)
Affected
React server packages 19.0.0, 19.1.0, 19.1.1 and 19.2.0; Next.js 15.x and 16.x with the App Router before the fixed versions, and canaries from 14.3.0-canary.77
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. Current patches: Next.js 16.4.5 or 15.5.29
Published
December 3, 2025
Exploited in the wild
Yes, reported

In short

  • React2Shell lets a stranger run code on your server with one request, before any login. CISA lists it as exploited in the wild, ransomware included.
  • Affected: Next.js 15.x and 16.x with the App Router below 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7 or 16.0.7, and any RSC framework on React server packages 19.0.0, 19.1.0, 19.1.1 or 19.2.0. Pages Router and browser-only React apps are not.
  • In a Next.js app the vulnerable React code ships inside the next package, so check the next version in your lockfile.
  • The December 2025 patches are no longer enough: seven more advisories hit the same code, and since April 2026 Next.js ships the new fixes only on the 15.5 and 16 lines.
  • If your app was online and unpatched on December 4, 2025, rotate every secret it holds after upgrading.
On this page

What CVE-2025-55182 is, in plain words

React Server Components (RSC) run part of a React app on the server. When a page calls a Server Function (a Server Action, in Next.js), the browser sends a request in React's Flight format, and the server turns it back into values: that step is called deserialization. In the affected versions, the server unsafely deserializes the request, and a crafted one can make it run code chosen by whoever sent it.

No account, session or click is needed. The bug sits in three React packages, react-server-dom-webpack, react-server-dom-parcel and react-server-dom-turbopack, at versions 19.0.0, 19.1.0, 19.1.1 and 19.2.0, and in every framework that ships them, starting with the Next.js App Router. Security teams call it React2Shell.

You do not need to have written a Server Action. The React team says an app can be vulnerable as soon as it supports React Server Components, and Microsoft notes that default configurations are vulnerable with no developer error involved.

What a stranger can do with it

Code that runs on your server has your server's access. Here is what that reaches, with what Microsoft saw attackers do after breaking in:

  • Environment variables: in a typical AI-built app, DATABASE_URL, a Supabase service role key, STRIPE_SECRET_KEY, OPENAI_API_KEY and session secrets. Microsoft saw attackers hunt for AI and cloud credentials.
  • Your database, through those credentials. A service role key skips row level security entirely.
  • Your cloud account, with identity tokens pulled from the machine's metadata endpoint.
  • The machine itself, on a server you run: crypto miners, remote access tools, new user accounts, changed SSH settings.

Severity and exploitation status

The CVSS 3.1 base score is 10.0, critical, with the vector AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H: over the network, low complexity, no privileges, no user interaction. The score comes from Meta, the CVE numbering authority (CNA). NVD shows the same score and has not published its own. The weakness is CWE-502, deserialization of untrusted data.

CISA rates the flaw as automatable, with total technical impact. An app that sat online unpatched in December 2025 should be treated as possibly compromised, even if nothing looks wrong.

Who is affected

SetupAffected by CVE-2025-55182?
Next.js 15.x or 16.x with the App Router, below 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7 or 16.0.7Yes, with default settings
Next.js canary 14.3.0-canary.77 and later canaries, before 15.6.0-canary.58 or 16.1.0-canary.12Yes
Next.js 13.x or 14.x stableNo
A Next.js app that uses only the Pages RouterNo
Routes on the Next.js Edge RuntimeNo, per the Next.js advisory
React Router (unstable RSC APIs), Waku, @parcel/rsc, @vitejs/plugin-rsc or RedwoodSDK with a react-server-dom-* package at 19.0.0, 19.1.0, 19.1.1 or 19.2.0Yes
React that only runs in the browser, such as a Vite single-page appNo: no server decodes Flight requests
Sources: the React and Next.js advisories. Next.js 13 and 14 escaped this CVE but not the later ones in the same family, see below.

For AI-built apps the split is usually clear. A React single-page app on a hosted backend such as Supabase runs React in the browser only, so this CVE does not apply to its frontend. A Next.js App Router app is in scope. Published v0 apps were: Vercel rolled out patches to existing v0 chats and asks owners to patch right away with the Fix with v0 button. Unpublished v0 apps are not affected.

Hosted on Vercel or self-hosted

The code is the same everywhere, so your version decides. Vercel deployed WAF rules (a web application firewall filters requests before they reach your app) for all its users before the disclosure, added more on December 5, and blocks new deployments of vulnerable versions. It also states that WAF rules cannot cover every variant and that upgrading is the only complete fix. AWS, Google Cloud, Netlify, Fastly and Akamai published their own stopgaps. On a server you run with next start, you only had the filters you set up yourself.

How to check if your app is affected

Check the installed version, not the range in package.json: "next": "^15.1.0" can still resolve to 15.1.0 in your lockfile. Run these at the root of your project:

bash
# npm
npm ls next react-server-dom-webpack react-server-dom-turbopack react-server-dom-parcel

# pnpm (add -r in a monorepo)
pnpm why next

# yarn
yarn why next

# the version Next.js reports for itself
npx next --version
Compare the result with the table above and with the fix section below.

Read it from the lockfile

bash
# package-lock.json
grep -A1 '"node_modules/next"' package-lock.json

# pnpm-lock.yaml
grep -E '^  /?next@' pnpm-lock.yaml

# yarn.lock (Yarn 1 and Yarn Berry)
grep -A1 -E '^"?next@' yarn.lock
The lockfile is what your host installs at build time. In a monorepo, check every app that has its own next dependency.

Check the version that is live

Production can lag behind your repository. Open your live site, open the browser console and type next.version, a check Vercel's bulletin lists. Vercel also shows a dashboard banner when a production deployment uses a vulnerable version. Its npx fix-react2shell-next scans every package.json in a repository, monorepos included, and bumps the vulnerable ones: compare where it leaves you with the versions below.

How to fix CVE-2025-55182 in November 2026

There is no workaround: the Next.js team says upgrading is required. The first fixed versions shipped on December 3, 2025: React 19.0.1, 19.1.2 and 19.2.1, and Next.js 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7 and 16.0.7. They stop the remote code execution. Today they are a floor, not a target.

Seven more advisories have hit the same React code since: one source code exposure and six denial-of-service bugs, the latest in July 2026. From the April 2026 advisory on, Next.js lists fixes only on the 15.5 and 16 lines and marks every version from 13.0.0 up to them as affected. A team that moved 15.3 to 15.3.6 in December is patched against React2Shell, but still exposed to the later bugs, and the ones from April 2026 on have no fix on 15.3.

bash
# Next.js 16 (Active LTS), current patch as of November 6, 2026
npm install [email protected]

# Next.js 15 (Maintenance LTS), if you cannot move to 16 yet
npm install [email protected]

# same with pnpm or yarn
pnpm add [email protected]
yarn add [email protected]

# React Router, Waku, Parcel or the Vite RSC plugin:
# update the React server package you use (webpack, parcel or turbopack)
npm install react@latest react-dom@latest react-server-dom-webpack@latest
Commit the updated lockfile, rebuild and redeploy. Moving from 15.x to 16 is a major upgrade: read the Next.js upgrade guide first.

These two releases also carry the fixes for unrelated 2026 Next.js advisories, including critical remote code execution bugs in the image optimizer, so stopping at the December version is not enough.

On a canary from 14.3.0-canary.77 onward, the December advisory says to return to stable 14.x or to 14.3.0-canary.76. The 2026 advisories list Next.js 13 and 14 as affected, with fixes only on 15.5 and 16, so plan the move to one of those. Firewall rules from your host buy time. They are not the fix.

What to do after upgrading

  1. 1

    Confirm production runs the fix

    Redeploy, then type next.version in the console of your live site. A build cache or an old container image can keep the vulnerable version running.

  2. 2

    Close old preview deployments

    Previews built before the fix still run the old code. Vercel recommends Standard Protection on every deployment except your production domain, and an audit of shareable links.

  3. 3

    Rotate your secrets

    The Next.js team asks every app that was online and unpatched as of December 4, 2025 at 1:00 PM PT to rotate its secrets, the most critical first: database password, Supabase service role key, Stripe secret key, AI provider keys, then session secrets. Our guide on what to do when an API key leaks has the steps per provider.

  4. 4

    Look for signs of compromise

    CISA asks owners to check every internet-facing instance after patching. On a server you run, look for what Microsoft reported: unknown processes, crypto miners, new user accounts, changed SSH settings. Then check your database and provider logs for access you do not recognize.

Researchers who studied the React2Shell patch found more bugs in the same decoding code. None allows remote code execution, and the React team says the React2Shell patch remains effective. They still need newer versions.

CVEWhat it doesSeverityFirst fixed React versions
CVE-2025-55182Remote code executionCritical, 10.019.0.1, 19.1.2, 19.2.1
CVE-2025-55183Returns the source code of Server FunctionsMedium, 5.319.0.2, 19.1.3, 19.2.2
CVE-2025-55184Denial of service, server hangsHigh, 7.519.0.2, 19.1.3, 19.2.2 (incomplete)
CVE-2025-67779Denial of service, complete fix of 55184High, 7.519.0.3, 19.1.4, 19.2.3
CVE-2026-23864Denial of service, CPU or memoryHigh, 7.519.0.4, 19.1.5, 19.2.4
CVE-2026-23869Denial of service, CPUHigh, 7.519.0.5, 19.1.6, 19.2.5
CVE-2026-23870Denial of serviceHigh, 7.519.0.6, 19.1.7, 19.2.6
CVE-2026-44907Denial of service, CPU or memoryHigh, 7.519.0.8, 19.1.9, 19.2.8
From the GitHub advisories for the React server packages. Next.js fixes each one in its own releases, so check the next version, not these.

Timeline

DateEvent
November 29, 2025Lachlan Davidson reports the flaw through Meta's bug bounty.
December 3Fixed React and Next.js versions published, CVE-2025-55182 disclosed. The Next.js ID, CVE-2025-66478, is rejected as a duplicate. AWS sees exploitation attempts within hours.
December 4, 1:00 PM PTThe cutoff Next.js later sets: apps online and unpatched at this time should rotate their secrets.
December 5CISA adds it to the KEV catalog. Microsoft sees exploitation from this date.
December 6Next.js asks apps unpatched as of December 4 to rotate their secrets.
December 11 and 12CVE-2025-55183, CVE-2025-55184 and CVE-2025-67779 disclosed.
January 26, 2026CVE-2026-23864, and the last Next.js patches on the 15.0 to 15.4 and 16.0 lines.
April to July 2026CVE-2026-23869, CVE-2026-23870 and CVE-2026-44907, all denial of service.
November 3, 2026Next.js 16.4.5 and 15.5.29, the current patches on the two LTS lines.

What Keybrum checks on a live app

A version check says what you should run, not what answers on your production domain. On a Next.js app, Keybrum checks from the outside whether the app answers the React Server Components protocol and ships Server Action ids in its JavaScript, which means the path React2Shell uses is reachable, and reports the version floor to reach. That shows the surface is live, not that your version is vulnerable: the version check above decides that. It does not send the exploit payload: Keybrum never runs remote code execution or denial-of-service payloads.

The same run tries the Next.js CVEs it can prove by behaviour, such as the middleware bypass CVE-2025-29927. See the Next.js security guide for the rest of the framework, and vibe coding security risks for what AI-built apps leak most often.

Questions

Is my Next.js app vulnerable to CVE-2025-55182?

It is if it uses the App Router on Next.js 15.x or 16.x below 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7 or 16.0.7, or a canary from 14.3.0-canary.77 onward. Pages Router apps and Next.js 13 and 14 stable were not affected by this CVE, though the 2026 follow-up bugs do reach 13 and 14. Check the next version in your lockfile.

Is there a React2Shell scanner?

Start with a version check: npx fix-react2shell-next scans your repository, and the Next.js CVE checker compares your versions with every known advisory. Scanners that fire the exploit run code on the target server, so only point one at an app you own.

Does upgrading React fix React2Shell in Next.js?

No. Next.js ships its own copy of the vulnerable React server packages inside next, so only a patched next release fixes it. With other RSC frameworks, update the react-server-dom-* package directly.

Is a Next.js app hosted on Vercel safe from React2Shell?

Only partly. Vercel added WAF rules for every project and blocks new deployments of vulnerable versions, but says WAF rules cannot cover every variant and that upgrading is the only complete fix. Deployments built before the fix keep their old version.

Is this a React Server Components vulnerability or a Next.js one?

Both. The bug is in React's own server packages, so every framework using them was affected: Next.js, React Router's RSC APIs, Waku, @parcel/rsc, @vitejs/plugin-rsc and RedwoodSDK. Next.js first tracked its side as CVE-2025-66478, later rejected as a duplicate.

Do I need to rotate secrets after patching?

Yes, if your app was online and unpatched as of December 4, 2025 at 1:00 PM PT: that is the Next.js team's advice. Exploitation was automated and attackers went after environment variables, so start with database, payment and AI provider keys.

Sources

  1. 1.CVE-2025-55182 Detail, NIST National Vulnerability Database
  2. 2.CVE-2025-55182 record, CVE Program
  3. 3.React Server Components are Vulnerable to RCE (GHSA-fv66-9v8q-g76r), GitHub Advisory Database
  4. 4.Critical Security Vulnerability in React Server Components, React
  5. 5.Next.js is vulnerable to RCE in React flight protocol (GHSA-9qr9-h5gf-34mp), GitHub Advisory Database
  6. 6.Security Advisory: CVE-2025-66478, Next.js
  7. 7.Denial of Service and Source Code Exposure in React Server Components, React
  8. 8.Next.js Security Update: December 11, 2025, Next.js
  9. 9.Next.js has a Denial of Service with Server Components (GHSA-q4gf-8mx6-v5v3), GitHub Advisory Database
  10. 10.react-server-dom: Denial of Service in Server Functions (GHSA-wx67-qw84-cm4g, CVE-2026-44907), GitHub Advisory Database
  11. 11.November 2026 Security Release, Next.js
  12. 12.Next.js: Unauthenticated Remote Code Execution in Image Optimization API (GHSA-2464-fhr4-w9xw), GitHub Advisory Database
  13. 13.Known Exploited Vulnerabilities Catalog: CVE-2025-55182, CISA
  14. 14.React2Shell Security Bulletin, Vercel
  15. 15.China-nexus cyber threat groups rapidly exploit React2Shell vulnerability (CVE-2025-55182), AWS Security Blog
  16. 16.Defending against the CVE-2025-55182 (React2Shell) vulnerability in React Server Components, Microsoft Security Blog
  17. 17.Half of exposed React servers remain unpatched amid active exploitation, The Register

Your app is public. So are its mistakes.

Check what any attacker can already see in it, free, in ten seconds. The full attack, with proof and fixes: €49 once, or €29 a month on a plan.

or continue with Google or GitHub