React2Shell (CVE‑2025‑55182) is a CVSS 10, pre‑authentication remote code execution bug in React Server Components that bites default configs across popular stacks. The React team shipped fixes on December 3, 2025 for the react-server-dom-* packages, and you should already be on 19.0.1, 19.1.2, or 19.2.1 for the RCE—plus later updates for follow‑on issues. If your app serves RSC, treat this as an emergency change. (react.dev)
If you’re on Next.js App Router, Vercel posted patched releases and a one‑shot helper (npx fix-react2shell-next) to bump projects. They also advised rotating secrets if your app was online and unpatched as of December 4, 2025 at 1:00 PM PT. (nextjs.org)
Meanwhile, the Node.js project pushed its December security release window to Wednesday, January 7, 2026—citing multiple high‑severity fixes across 25.x, 24.x, 22.x, and 20.x. That means you’ve got to land the React2Shell mitigation now and be ready for Node patches the first week of January. (nodejs.org)
What exactly broke in React Server Components?
React Server Components communicate via the Flight protocol. The core bug lets an attacker send a crafted payload that React accepts as valid, leading to prototype pollution and, ultimately, arbitrary code execution in vulnerable versions of the server‑side packages. Microsoft reports exploitation attempts started as early as December 5, with public PoCs showing near‑100% reliability against unpatched targets; both Linux and Windows servers have been affected. In short: default setups were exposed, auth wasn’t required, and time‑to‑exploit was measured in hours. (microsoft.com)
Who’s actually affected?
Directly affected packages: react-server-dom-webpack, react-server-dom-parcel, and react-server-dom-turbopack in versions 19.0, 19.1.0, 19.1.1, and 19.2.0. Fixed versions for the RCE are 19.0.1, 19.1.2, and 19.2.1. (react.dev)
Downstream frameworks: Next.js App Router, React Router’s RSC preview, Waku, Parcel RSC, and Vite’s RSC plugin, among others, depending on how they bundle or depend on the vulnerable packages. The React team later disclosed a medium‑severity source code exposure (CVE‑2025‑55183) and two high‑severity DoS issues (CVE‑2025‑55184, CVE‑2025‑67779) that required another round of upgrades (safe lines include 19.0.3, 19.1.4, 19.2.3). (react.dev)
Does the Next.js Pages Router need patching?
Pages Router apps aren’t affected by the RSC protocol bug, but if you’re on Next.js 14.x or higher you should still move to a patched release—the official guidance lists fixed builds like 14.2.35 and 16.0.10 for App Router users, and consolidating on a patched baseline reduces confusion later. (nextjs.org)
Are React Native apps affected?
Not by the server‑side exploit path. The React advisory notes that monorepos with React Native may carry the vulnerable server packages without using them; if they’re present, update only the impacted packages to avoid version mismatch errors, but the mobile client itself isn’t in the blast radius. (react.dev)
React2Shell patch order that won’t break prod
Here’s the sequence we’ve used with client teams this week to keep downtime near zero.
1) Confirm exposure. Inventory services running RSC or a framework that embeds it (Next.js App Router, etc.). Search for use server Server Functions and confirm public endpoints. Don’t assume private VPC equals safe—reverse proxies, edge functions, and misconfigured routes can surface endpoints. Microsoft observed exploitation despite minimal footprints, and the technique doesn’t require authentication. (microsoft.com)
2) Upgrade React server packages. If you control the RSC packages directly, bump to 19.0.1/19.1.2/19.2.1 for the RCE fix immediately, then continue to the follow‑on DoS/source‑exposure fixes (19.0.3/19.1.4/19.2.3). Lockfiles must reflect those minimums; verify with npm ls react-server-dom-*. (react.dev)
3) Upgrade Next.js to a patched version if you use App Router. The security update lists fixed lines (for example, 14.2.35 and 16.0.10) and provides a mapping across 15.x sub‑releases as well. Apply the upgrade and re‑generate the production build; don’t rely on runtime shims alone. (nextjs.org)
4) Rotate secrets if you were exposed. The Next.js advisory recommends secret rotation if your app was online and unpatched as of December 4 at 1:00 PM PT. Prioritize credentials reachable from your web tier first (database users, API keys, JWT signing keys), then work inward. (nextjs.org)
5) Use WAF and edge mitigations as air cover, not as a cure. Several providers pushed rules to block typical exploit payloads, and some hosts added runtime mitigations, but both React and Microsoft emphasize that you still need to patch. Consider rules a brake, not a seatbelt. (react.dev)
But Node.js security releases slipped—what does that change?
The Node.js team moved the planned December security drops to January 7, 2026 to ensure stable patches and avoid holiday disruptions. Their summary calls out three high‑severity issues affecting 25.x, 24.x, 22.x, and 20.x, with additional low/medium items. That’s a real maintenance event, just not this week. Translation: you can—and should—ship the React2Shell fix now, then prep your Node upgrade rehearsal for the first week of January. (nodejs.org)
Need a battle‑tested runbook for Node patch weeks? We’ve published one before; the steps still apply. See our practical playbooks for sequencing, smoke tests, and rollback gates in Node.js Security Releases: Your 48‑Hour Plan and the detailed timing in today‑plus‑72‑hour checklist. Use them to pre‑stage your CI pipelines and rollback artifacts while the React work is underway.
A 72‑hour stabilization plan you can run today
Day 0 (today): triage and guardrails
• Declare a narrow change window for RSC/Next.js upgrades only. Freeze unrelated feature deploys for 48–72 hours.
• Snapshot: tag the current production image, export environment variables, and capture a baseline of CPU/memory and error rates.
• Triage flow: identify internet‑exposed services with RSC endpoints; list dependent secrets for rotation; note downstream jobs (CRON, workers) that import shared modules.
Day 1: patch and prove
• Upgrade React RSC packages (or your framework) to patched versions; commit lockfile changes separately for clarity.
• Rebuild, run integration tests that exercise RSC boundaries, and deploy behind a small canary slice (1–5%).
• Rotate high‑impact secrets starting with database users reachable from web nodes and any long‑lived tokens cached server‑side.
• Add WAF rules/edge protections if available and log blocks by rule ID.
Day 2: expand and monitor
• Raise canary to 25–50%, watch for error signatures and latency regressions; then roll to 100% if clean for two hours.
• Verify no stale containers: terminate old tasks/pods to avoid side‑by‑side vulnerable images.
• Close the loop with a post‑patch validation: confirm versions via /about or build metadata endpoint; snapshot final metrics.
How to prove you actually fixed it
Here’s the thing: “we upgraded” isn’t proof. Build affirmations you can show your CISO, auditors, or customers.
• Lockfile diff: show react-server-dom-* at ≥ 19.0.3/19.1.4/19.2.3 (covers RCE and the later DoS fix). (react.dev)
• Runtime fingerprint: export versions at build time into an endpoint (e.g., /__health) and capture a screenshot in the change record.
• Exploit simulation: run a benign variant of the published request shape against a non‑prod environment; expect a handled error or block, not code execution. Microsoft’s write‑up explains why naive payloads often succeed against unpatched targets. (microsoft.com)
• Log review: search for suspicious Flight deserialization errors, sudden CPU spikes without traffic growth, or unexpected child processes spawned by the web worker.
• E2E smoke: SSR pages that rely on Server Functions, plus 95th percentile latency and error rate comparisons pre/post patch.
Common pitfalls we’re seeing
• Partial upgrades: monorepos that patch the app but leave a sibling package with a direct react-server-dom-* dependency at a vulnerable version. Grep the whole workspace and run npm ls from the repo root.
• False sense of safety from failing PoCs: several “public PoCs” floating around are broken, which can trick teams into thinking they’re safe. Don’t gate your patch on a PoC test; use version evidence and vendor verification. (radware.com)
• Over‑trusting WAF rules: rulesets blunt common payloads but won’t catch every variant. React’s own advisory says to patch no matter what hosting mitigations you applied. (react.dev)
• Forgetting canaries and autoscaling: if you upgrade only the deployment rolling set and skip workers or scheduled jobs that also import RSC helpers, you can end up with mixed‑version behavior and weird error tails under load.
Data points and dates to anchor your brief
• November 29, 2025: vulnerability reported privately to Meta by Lachlan Davidson. (react.dev)
• December 3, 2025: React posts the RCE advisory and publishes fixed packages (19.0.1/19.1.2/19.2.1). (react.dev)
• December 4–5, 2025: public PoCs emerge; exploitation observed by defenders beginning December 5. (microsoft.com)
• December 11, 2025: React discloses additional DoS (CVE‑2025‑55184, CVE‑2025‑67779) and source code exposure (CVE‑2025‑55183) issues; safe lines include 19.0.3/19.1.4/19.2.3. (react.dev)
• December 17, 2025: Node.js announces the security releases are delayed to January 7, 2026. (nodejs.org)
FAQ: the quick answers your stakeholders will ask
Is our risk over once we upgrade?
It drops sharply, but you still need to rotate secrets if you were exposed during the early window, and you should monitor for anomalous processes or callbacks for at least a week. The official Next.js advisory set a clear bar for secret rotation timing. (nextjs.org)
Do we need emergency pen‑testing?
If you were internet‑facing and unpatched through December 5–8, schedule a focused compromise assessment rather than a generic pen‑test. Microsoft observed real attempts in that period, mostly ending in commodity payloads like coin miners—still a signal to check. (microsoft.com)
Can we wait for the Node.js security releases and bundle everything?
No. React2Shell is actively exploited and trivial to run against unpatched services. Apply the RSC/Next.js fixes now. Prep your Node patch rehearsal for the week of January 7. (microsoft.com)
Let’s get practical: commands and checks
• Identify vulnerable packages: npm ls react-server-dom-* or pnpm why react-server-dom-webpack.
• Patch React RSC directly: npm install react-server-dom-webpack@^19.2.3 (and siblings) or use your framework’s patched releases.
• Patch Next.js App Router apps: follow the table in the Next.js security update (examples: npm i [email protected] or npm i [email protected]). (nextjs.org)
• Rotate secrets: database users, JWT signing keys, OAuth client secrets, webhook tokens. Document which services were online and whether logs show suspicious inputs to Server Functions.
• Validate: a) 2xx/4xx behavior on typical Server Functions, b) no Flight deserialization errors in logs, c) CPU steady at pre‑patch baseline on peak traffic.
What to do next (by role)
For engineering managers:
• Assign one owner for each service to complete the patch and provide before/after evidence (lockfile, build hash, screenshot of health endpoint).
• Stage an emergency rollback image for each service. If you must roll back, keep WAF rules on and cut traffic by 50% until post‑mortem is done.
• Book a 30‑minute readout: what changed, what secrets rotated, and what metrics moved.
For platform/SRE leads:
• Bake version metadata into images; force a rolling restart to kill straggler pods.
• Add a five‑minute synthetic check that calls a trivial Server Function; alert on unexpected CPU growth or latency spikes.
• Pre‑stage Node.js upgrade pipelines and test against staging so you’re ready for the January 7 drop. Our patch‑week playbook covers order of operations and safety checks.
For founders/CTOs:
• Ask for a one‑page risk brief with the timeline above and explicit confirmation of secret rotation where applicable.
• Confirm cyber insurance reporting thresholds and whether this incident triggers notice obligations.
• If you lack in‑house bandwidth, get help. Our application security services and recent posts on Next.js patching without drama and securing Next.js this week are designed for exactly this.
Zooming out
The story isn’t just a single CVE. It’s that modern web apps spread server logic across frameworks, bundlers, and edge runtimes where a protocol flaw can ripple through your stack in a day. React2Shell reminded us that secure defaults matter, PoCs travel fast, and coordination across vendors works—React shipped, Next.js shipped, cloud providers added guardrails, defenders shared telemetry. Your job now is to stamp out the last unpatched surfaces and be ready for the Node.js release window in January.
If you want a second set of eyes before you hit deploy, reach out via our contact form. Ship the fix, prove it, sleep better.