
"One crafted HTTP request can compromise your entire server." — React Security Team, Dec 2025
Severity: CRITICAL | CVSS v3.1: 10.0 (Maximum) | Status: Actively Exploited
React2Shell is a critical security vulnerability in React Server Components (RSC) — a modern feature that lets React run parts of your web app on the server instead of the browser.
The flaw allows any attacker on the internet — with no login, no special access, and no prior knowledge of your system — to send a single malicious HTTP request to your server and run any code they want on it. That means they can steal data, install malware, lock your files with ransomware, or take full control of your server.
Think of it like this: your server has a door that was supposed to only open for trusted visitors, but it turns out anyone can walk in — just by knocking in a specific way.
| Property | Value |
|---|---|
| CVE ID | CVE-2025-55182 (also called React2Shell) |
| Severity | Critical — Remote Code Execution (RCE) |
| CVSS v3.1 Score | 10.0 / 10.0 (maximum possible) |
| CVSS v4 Score | 9.3 / 10.0 |
| Weakness Type | CWE-502 — Deserialization of Untrusted Data |
| Attack Method | Single HTTP POST request, no authentication needed |
| Discovered By | Lachlan Davidson (security researcher) |
| Disclosed | December 3, 2025 |
| Exploit Status | Public exploit available — actively used by attackers |
| Related CVE | CVE-2025-66478 (Next.js — confirmed duplicate) |
react-server-dom-webpack — versions 19.0.0, 19.1.0, 19.1.1, 19.2.0
react-server-dom-parcel — versions 19.0.0, 19.1.0, 19.1.1, 19.2.0
react-server-dom-turbopack — versions 19.0.0, 19.1.0, 19.1.1, 19.2.0
⚠️ Important: You are vulnerable even if you do not use Server Actions or Server Functions explicitly — as long as React Server Components are enabled in your app.
✅ Not affected: Apps using only the Pages Router, or apps with no server-side React at all.
Three reasons make React2Shell exceptionally severe:
No authentication required. Anyone on the internet can attempt this attack. No account, no token, no prior access needed.
Works on default installations. A brand-new Next.js app created with create-next-app — with zero custom configuration — is immediately exploitable. Developers do not have to do anything wrong to be vulnerable.
Near-100% reliability. Security researchers confirmed the exploit works almost every time against unpatched servers.
When your React server receives data from a client, it processes (deserializes) that data to understand what to do next. The problem is that React never checks whether that data is safe or legitimate — it blindly trusts whatever arrives.
An attacker exploits this by sending specially crafted data that hijacks internal JavaScript behavior on the server, ultimately allowing them to inject and execute their own code.
The exploit uses a technique called prototype pollution:
Object.prototype.then — a fundamental JavaScript object that all other objects inherit from.Function constructor.Function constructor to execute arbitrary code as the Node.js server process.Step 1 — Attacker sends crafted HTTP POST
↓
Step 2 — React deserializes payload blindly
↓
Step 3 — Object.prototype.then is hijacked (prototype pollution)
↓
Step 4 — Function constructor is accessed
↓
Step 5 — Attacker's code runs on the server
↓
Step 6 — Attacker has full server control
// This is a simplified version of the vulnerable code path inside React
function parseFlightRequest(req) {
const flight = req.body;
// ❌ NO validation — the server trusts whatever arrives
const decoded = dangerousDeserialize(flight); // Attack happens here
// If the attacker controls decoded.action → RCE
return executeServerReference(decoded.action);
}
POST /?flight=1 HTTP/1.1
Content-Type: text/plain
{
"status": "resolved_model",
"$1:__proto__:then": "node:process.mainModule.require('child_process').execSync('id > /tmp/rce')",
"_formData.get": "$1:constructor:constructor"
}
# Simplified cURL version of the exploit
curl -X POST https://target.com/react?flight=1 \
-H "Content-Type: text/plain" \
--data '["$ACTION_REF","__proto__","constructor","<attacker_payload>"]'
🚫 Legal warning: Do not use this against any system you do not own or have explicit written authorization to test.
| Package | Patched Version |
|---|---|
react-server-dom-webpack | 19.0.1, 19.1.2, 19.2.1+ |
react-server-dom-parcel | 19.0.1, 19.1.2, |
💡 Recommendation: Upgrade to 19.2.3 to also fix related follow-on vulnerabilities (CVE-2025-55183, CVE-2025-55184, CVE-2025-67779).
Follow these steps in order. Step 1 and 2 are mandatory. The rest add extra layers of defense.
# Check your current version
npm list react-server-dom-webpack
# Upgrade to the latest patched version
npm install react-server-dom-webpack@latest
npm install react-server-dom-parcel@latest
npm install react-server-dom-turbopack@latest
# For Next.js — replace X with your patched version from the table above
npm install next@X
⚠️ WAF rules alone are not enough. They cannot block every payload variant. Patching your packages is the only complete fix.
AWS alone accounts for over one-third of observed attacker infrastructure — meaning attackers are largely operating from cloud-hosted servers to conduct these attacks at scale.
Multiple distinct threat actor groups have been confirmed exploiting this vulnerability:
China-nexus (State-sponsored)
Iran-nexus
North Korea (DPRK) ⚠️ New — January 2026
Cybercriminals / Financially Motivated
💡 What is an in-memory web shell? It is a backdoor that runs entirely in server memory — leaving no files on disk, making it extremely hard to detect with standard antivirus or file-scanning tools.
💡 What is blockchain-based C2? Instead of connecting to attacker servers via normal IP addresses or domains (which can be blocked), EtherRAT receives its commands from blockchain transactions — a decentralized system that cannot be easily taken down or blocked.
Two dedicated templates are available in the security explorer gallery:
Microsoft Security Exposure Management also automatically maps React2Shell attack paths across your cloud infrastructure.
A ready-to-use block template is available: React Server Components Unsafe Deserialization CVE-2025-55182 RCE Attempt
Full attacker fingerprint datasets (ASN, JA4T, JA4H) are publicly available:
github.com/GreyNoise-Intelligence/gn-research-supplemental-data/tree/main/2026-01-06-react2shell
Use Runtime Vulnerability Analytics — filter by CVE-2025-55182 to identify vulnerable React or Next.js packages in your environment.
After disclosure, approximately 145 fake and non-functional exploit tools were circulated online — many generated by AI. Risks of using unverified tools:
Only use scanners from verified, community-trusted sources.
Nov 29, 2025 Lachlan Davidson privately reports the vulnerability to Meta / React team
Dec 03, 2025 Patched packages published to npm
CVE-2025-55182 publicly disclosed
Vercel deploys runtime-level protections (not just WAF)
Cloudflare WAF rules activated
Mass automated scanning begins within hours of disclosure
Dec 04, 2025 First working public exploit released by Moritz Sanft
Default create-next-app confirmed exploitable with no changes
Dec 05, 2025 Discoverer Lachlan Davidson releases his own PoC (~30 hours post-disclosure)
Active exploitation observed in Datadog and Rapid7 honeypots
Darktrace honeypot infected in 2 minutes after deployment
Dec 05–08 "emerald" and "nuts" malware campaigns deploy Cobalt Strike, Sliver,
Nezha, FRP, Secret-Hunter; Mirai and Rondo botnets also active
362 unique attacker IPs observed; 152 with identifiable payloads
Dec 08, 2025 Rapid7 confirms exploitation using the public PoC
Dec 11, 2025 Follow-on CVEs disclosed: CVE-2025-55183 and CVE-2025-55184
Dec 12, 2025 Google GTIG identifies China-nexus threat clusters
Iran-nexus activity also flagged
Dec 15, 2025 Microsoft confirms hundreds of compromised machines
Coin miners and backdoors (SNOWLIGHT, HISONIC) deployed at scale
Microsoft Defender for Cloud templates published
Dec 17, 2025 ⚠️ [NEW] Ransomware operators confirmed using React2Shell for
initial access — malware deployed in under one minute post-exploitation
(Reported by BleepingComputer, based on S-RM and Microsoft Defender)
Dec 29, 2025 AWS formally attributes activity to Earth Lamia and Jackpot Panda
AWS Network Firewall Active Threat Defense rules updated
Jan 06, 2026 GreyNoise publishes full attacker fingerprint dataset
(8.1M+ attack sessions recorded)
Jan 13, 2026 ⚠️ [NEW] IronGate Security identifies DPRK (North Korea) exploitation
Indicators linked to Contagious Interview campaign
EtherRAT (blockchain C2 backdoor) deployed post-exploitation
Attacker staging involves downloading Node.js runtime before payload
Jan 26, 2026 Additional DoS vulnerability CVE-2026-23864 disclosed and patched
Mar 04, 2026 Dynatrace advisory updated with latest remediation guidance
Vulnerability Credit: Original discovery and responsible disclosure by Lachlan Davidson (November 29, 2025).
Last updated: April 16, 2026 This document is for educational and defensive security purposes only.
| Framework / Tool | Affected Scope |
|---|
| Next.js 15.x – 16.x | App Router only — Pages Router is NOT affected |
| React Router RSC | Unstable / preview channel only |
| Redwood SDK | RSC mode only |
| Waku | All versions with RSC enabled |
| Expo | RSC preview builds only |
| Vite RSC Plugin | All integrations |
| Parcel RSC Plugin | All integrations |
| Any custom RSC setup | Any server using RSC Flight deserialization |
react-server-dom-turbopack | 19.0.1, 19.1.2, 19.2.1+ |
| Your Version | Upgrade To |
|---|
| 13.x / 14.x | 14.2.35 |
| 15.0.x | 15.0.5 |
| 15.1.x | 15.1.9 |
| 15.2.x | 15.2.6 |
| 15.3.x | 15.3.6 |
| 15.4.x | 15.4.8 |
| 15.5.x | 15.5.7 |
| 16.0.x | 16.0.7 |
| Cloud Provider | Action Required |
|---|
| AWS WAF | Enable AWSManagedRulesKnownBadInputsRuleSet v1.24+ — React2Shell rules are included |
| AWS Network Firewall | Enable Active Threat Defense managed rules (auto-updated via MadPot) |
| Google Cloud Armor | Deploy the React2Shell rule set from the console |
| Cloudflare | WAF rule react2shell-cve-2025-55182 — auto-applied for Pro+ plans |
| Metric | Figure |
|---|
| Total attack sessions | 8.1 million+ (GreyNoise) |
| Daily attack volume | 300,000 – 400,000 requests/day |
| Peak daily volume | 430,000+ (late December 2025) |
| Unique attacker IPs | 8,163 across 101 countries |
| Time to first infection | 2 minutes after server exposure |
| Malware / Tool | What It Does | Who Uses It |
|---|
| SNOWLIGHT | Downloads more malware | Earth Lamia (China) |
| MINOCAT | Creates hidden tunnels | Earth Lamia (China) |
| HISONIC | Backdoor for persistence | Earth Lamia (China) |
| COMPOOD | Survives reboots | Earth Lamia (China) |
| EtherRAT ⚠️ New | Blockchain C2 backdoor | DPRK / Contagious Interview |
| XMRig | Mines cryptocurrency | Multiple groups |
| Cobalt Strike | Remote control framework | "emerald" & "nuts" campaigns |
| Sliver / Nezha | C2 frameworks | "emerald" campaign |
| Fast Reverse Proxy (FRP) | Network tunneling | Multiple groups |
| Secret-Hunter | Steals credentials | "nuts" campaign |
| Mirai / Rondo botnets | DDoS / persistence | Opportunistic actors |
| MeshAgent (RMM tool) | Remote management | Multiple groups (persistence) |
| In-memory Next.js web shell ⚠️ New | Stealthy persistence | Multiple actors (GTIG confirmed) |
| CVE ID | Description | Severity | Status |
|---|
| CVE-2025-55182 | RSC Remote Code Execution — this vulnerability | 10.0 | Patched |
| CVE-2025-66478 | Next.js downstream RCE (confirmed duplicate) | 10.0 | Rejected — duplicate |
| CVE-2025-55183 | Source code exposure via RSC | 5.3 | Patched in 19.2.2+ |
| CVE-2025-55184 | Denial of Service via infinite loop in RSC parser | 7.5 | Patched in 19.2.2+ |
| CVE-2025-67779 | DoS — incomplete fix for CVE-2025-55184 | 7.5 | Patched in 19.2.3+ |
| CVE-2026-23864 | Additional RSC Denial of Service (January 2026) | 7.5 | Patched |
| Source | Link |
|---|