BYBOWU > Blog > Security

React2Shell: What Now? Secure Next.js This Week

blog hero image
If you patched for React2Shell last week and moved on, hit pause. Since December 3, the React and Next.js teams have shipped multiple advisories, including follow‑ups you probably didn’t plan for. This guide recaps what changed, clarifies exactly which React and Next.js versions are safe today, and gives you a focused 48‑hour plan to patch, prove, and monitor without derailing your sprint. I’ll also cover what responders are actually seeing in the wild and how to show auditors real ev...
📅
Published
Dec 17, 2025
🏷️
Category
Security
⏱️
Read Time
10 min

React2Shell is the kind of security event that keeps shipping teams up at night: a pre‑auth Remote Code Execution in the React Server Components protocol with downstream impact across frameworks. As of December 17, 2025, there have been multiple updates, an incomplete fix, and specific version targets for React and Next.js. If you run the App Router, this is priority one. Here’s what changed and how to lock it down this week.

Developers handling an emergency security patch at night

What happened — and what changed since December 3

On December 3, the React team disclosed a CVSS 10.0 vulnerability in React Server Components (CVE‑2025‑55182) that enables unauthenticated RCE by abusing the way RSC decodes payloads. The issue affected the RSC implementations in react-server-dom-* packages and was initially patched with 19.0.1, 19.1.2, and 19.2.1. If your app uses RSC, you were in scope even without explicit Server Functions. (react.dev)

Next.js followed with a downstream advisory tracking the RSC issue as CVE‑2025‑66478 and released an npx fix-react2shell-next utility to deterministically bump to patched lines. They also advised rotating secrets if your app was online and unpatched as of December 4, 2025 at 1:00 PM PT. (nextjs.org)

React2Shell follow‑ups: DoS, source leak, and an incomplete fix

Here’s the thing: the December 3 patches weren’t the end. On December 11, the React team disclosed two additional vulnerabilities in RSC found while researchers probed the original fix: a high‑severity DoS (CVE‑2025‑55184, later completed as CVE‑2025‑67779) and a medium‑severity source code exposure (CVE‑2025‑55183). The upshot: if you patched promptly after Dec 3, you likely had to patch again. React backported complete fixes to 19.0.3, 19.1.4, and 19.2.3; Next.js published updated guidance and fixed versions across 14.x–16.x lines. (react.dev)

Concretely, for Next.js App Router apps, the safe targets include 14.2.35 (for 13.3+ and 14.x), and for 15.x/16.x the specific fixed versions such as 15.0.7, 15.1.11, 15.2.8, 15.3.8, 15.4.10, 15.5.9, and 16.0.10, with matching canary builds for those staying on PPR canaries. If you’re on 14.3.0‑canary.77 or later canaries, the recommendation is to downgrade to stable 14.x or jump to the fixed canary. (nextjs.org)

Is React2Shell being exploited right now?

Yes, and defenders are seeing a familiar playbook. Microsoft reports exploitation attempts beginning December 5, including coin‑miner drops, reverse shells, and credential harvesting across Windows and Linux. Attackers are scanning for vulnerable RSC endpoints, then pulling down payloads, adding users, modifying authorized_keys, and trying cloud instance metadata endpoints for tokens. You’ll also see secret discovery tooling like TruffleHog and Gitleaks in the mix. If you were exposed before patching, assume secrets are compromised and rotate. (microsoft.com)

React2Shell: the minimum you must know

Let’s zoom in on the core facts that should drive your decisions:

  • Primary risk: pre‑auth RCE via RSC payload decoding in unpatched environments (CVE‑2025‑55182).
  • Follow‑ups: High‑severity DoS and medium‑severity source exposure; the initial DoS fix was incomplete and replaced by a complete fix (CVE‑2025‑67779). (react.dev)
  • Scope: Next.js App Router apps using React 19 RSC; Pages Router apps and Edge Runtime aren’t affected by the RCE advisory but should still update to the safe lines recommended by Next.js. (nextjs.org)

React2Shell action plan (48‑hour patch‑and‑proof)

Below is a practical, time‑boxed plan we’ve used to help teams stabilize quickly without losing the audit thread.

Hour 0–6: Identify exposure and stop the bleeding

Inventory which apps actually use RSC in production. Confirm by checking dependencies for any of:

  • react-server-dom-webpack, react-server-dom-parcel, react-server-dom-turbopack
  • next with App Router enabled

Snapshot your current state:

  • Create a one‑pager per service: public URL(s), environment(s), current Next.js and RSC package versions, and last deploy SHA.
  • Pull the last 14 days of logs for POSTs to Server Function endpoints; preserve them to immutable storage.
  • If you run WAF/edge rules, enable temporary blocks for obviously malformed RSC payloads until you redeploy.

Hour 6–18: Patch to known‑good versions

For React packages, move to 19.0.3, 19.1.4, or 19.2.3 depending on your track. For Next.js App Router apps, target the fixed versions in your line: for 14.x use 14.2.35; for 15.x/16.x use the exact versions listed in the Dec 11 advisory. If you’re on PPR canaries, use the matching canary fixes. (react.dev)

Practical commands that won’t surprise CI:

  • npx fix-react2shell-next to audit and bump Next.js deterministically on supported lines.
  • npm i -E react@latest react-dom@latest alongside the updated react-server-dom-* packages if you’re not on Next.js but still using RSC.
  • Rebuild images with a clean lockfile; avoid partial lockfile edits that can drift between environments.

Redeploy, then smoke test server functions and critical routes. Verify the resolved versions at runtime: print process.versions for Node and require.resolve paths for next and RSC packages to confirm the right artifacts are loaded in prod.

Hour 18–30: Rotate and re‑issue

If you were online and unpatched during the window identified by the Next.js team (before Dec 4, 1:00 PM PT), rotate infrastructure and application secrets now. Prioritize cloud credentials, OAuth client secrets, webhook signing keys, and any tokens exposed to server‑side code paths processing RSC payloads. Update env management, redeploy, and invalidate caches/CDN if your app relies on signed URLs. Document each rotation with timestamps and approvers for audit traceability. (nextjs.org)

Hour 30–48: Hunt, clean, and prove

Search for suspicious POSTs hitting Server Function endpoints. Flag spikes around December 5 onward. Hunt for:

  • Outbound calls to *.trycloudflare.com or unusual pastebins.
  • New local users, modified authorized_keys, or unfamiliar systemd services.
  • Coin‑miner processes (e.g., xmrig) or high CPU anomalies aligned with traffic bursts.
  • Secrets access anomalies: requests to cloud instance metadata endpoints (IMDS) and sudden spikes in 4xx from KMS, Vault, or Secrets Manager. (microsoft.com)

For proof, generate a change dossier per service that includes: version before/after, deploy times, the exact CVEs addressed, and links to immutable CI artifacts. This is the package you hand to auditors and incident reviewers.

“People also ask” — quick answers we keep sending

Are Pages Router apps affected?

Pages Router apps aren’t in scope for the RCE advisory and the RSC protocol issues tracked in CVE‑2025‑66478, but the Next.js team still recommends upgrading to the safe version lines to stay aligned with the hardened RSC runtime and future backports. (nextjs.org)

Do Edge Runtime apps need to patch for React2Shell?

No for the core RCE and follow‑ups; the affected path is the Node‑hosted RSC server function pipeline. Still, keep Edge environments current to minimize drift and unexpected coupling with server‑rendered routes. (nextjs.org)

We patched on December 4. Why did we have to patch again?

Because probing a critical fix often uncovers variant issues. On Dec 11, React disclosed a DoS and a source code exposure in adjacent code paths, and the initial DoS fix was incomplete—finished under CVE‑2025‑67779—so teams needed an additional bump to the fully fixed builds. (react.dev)

What’s the risk if we don’t rotate secrets?

If an attacker reached RCE on your server during the exposure window, they could have read environment variables, pulled instance metadata, or scraped config files. Missing a rotation leaves that door open even after you patch.

Deployment realities that trip teams up

A few patterns I’ve seen this month: first, partial lockfile bumps. Developers update next but forget react-server-dom-* versions pinned transitively by the bundler or a framework plugin. Second, canary drift. Canary builds enabled for PPR stick around long after the experiment, then miss stable backports. If you must stay on canary, use the explicitly fixed canaries; otherwise, move to 14.2.35 or the named 15.x/16.x targets.

Third, environment skew. Your staging uses Node 22 with a patched OpenSSL, but production is still on 20.x with a different glibc baseline. That can mask runtime differences in how the RSC payload is handled, especially under pressure. Make runtime parity an explicit gate.

Data you can bring to leadership

Executives want three things: impact, exposure window, and residual risk. Give them this:

  • Impact: Pre‑auth RCE in RSC (CVE‑2025‑55182) plus high‑severity DoS and medium code exposure follow‑ups; complete DoS fix tracked as CVE‑2025‑67779. (react.dev)
  • Exposure window: Your app’s last unpatched deploy date/time through the patched redeploy timestamp; if online and unpatched as of Dec 4, 1:00 PM PT, treat secrets as compromised and rotated. (nextjs.org)
  • Residual risk: Post‑exploitation hunting results; confirmation of version pins; proof of secret rotation; and WAF/edge mitigations in place.

Don’t ignore Node.js releases on December 18

Separately from React2Shell, Node.js has security releases slated around Thursday, December 18, 2025 across supported lines (20.x, 22.x, and others). If you’re doing emergency deploys this week anyway, plan a Node bump window so you don’t re‑roll base images twice. Our Node.js Dec 18 runbook breaks down a safe patch path for production fleets. (nodejs.org)

What safe looks like (this week)

Here’s a quick baseline you can compare against. Your App Router services should meet all of the following:

  • React RSC packages at 19.0.3, 19.1.4, or 19.2.3; no lingering 19.0.1/19.1.2/19.2.1 builds.
  • Next.js on 14.2.35 (13.3+/14.x) or the exact 15.x/16.x fixed versions; canary users on the declared fixed canaries. (nextjs.org)
  • Secrets rotated if exposed during the online/unpatched window; evidence stored and linked to change tickets. (nextjs.org)
  • Threat hunting completed with findings documented; forensic logs preserved.
  • Lockfile and CI/CD attestations present in a single change dossier per service, ready for audit.

What to do next

For developers and SREs:

  • Run npx fix-react2shell-next and bump to the exact fixed lines; redeploy and verify fingerprints.
  • Upgrade RSC packages to the fully fixed React versions and rebuild containers from scratch.
  • Rotate secrets and roll keys; confirm no hardcoded secrets exist in server functions.
  • Harden: add WAF rules for malformed RSC payloads, block suspicious egress, and add alerting for IMDS access.

For engineering leaders:

  • Ask for the per‑service change dossier (before/after versions, deploy times, CVEs closed, secrets rotated).
  • Schedule a follow‑up Node.js patch window aligned with the December 18 releases.
  • Fund a short “design for secure RSC” review: no hardcoded secrets, explicit input validation at server function boundaries, and a plan to pin and monitor transitive dependencies.

Related guidance from us

If you want a deeper operational checklist, use our Patch, Prove, and Monitor checklist, our Next.js patch‑again‑after‑Dec‑11 guidance, and the earlier 10‑day patch and proof plan to keep your team moving without losing the audit trail.

Illustration of patched vs vulnerable dependencies

Bottom line on React2Shell

React2Shell isn’t done until you’ve 1) moved to the fully fixed React RSC and Next.js versions, 2) rotated secrets if you were online and unpatched during the exposure window, and 3) preserved evidence of both. Do those three, plus a short hunting pass, and you’ll be in a defensible place—without turning this into a never‑ending fire drill. If you need help, our application security services team can plug in quickly and leave you with clean version pins, rotated keys, and tidy proof for your board.

Terminal output showing successful package upgrades
Written by Viktoria Sulzhyk · BYBOWU
4,085 views

Work with a Phoenix-based web & app team

If this article resonated with your goals, our Phoenix, AZ team can help turn it into a real project for your business.

Explore Phoenix Web & App Services Get a Free Phoenix Web Development Quote

Get in Touch

Ready to start your next project? Let's discuss how we can help bring your vision to life

Email Us

[email protected]

We typically respond within 5 minutes – 4 hours (America/Phoenix time), wherever you are

Call Us

+1 (602) 748-9530

Available Mon–Fri, 9AM–6PM (America/Phoenix)

Live Chat

Start a conversation

Get instant answers

Visit Us

Phoenix, AZ / Spain / Ukraine

Digital Innovation Hub

Send us a message

Tell us about your project and we'll get back to you from Phoenix HQ within a few business hours. You can also ask for a free website/app audit.

💻
🎯
🚀
💎
🔥