Designated CVE-2025-55182 and widely dubbed "React2Shell," this vulnerability represents a worst-case scenario for modern web applications: Unauthenticated Remote Code Execution (RCE) on default configurations.
At its core, CVE-2025-55182 is an unsafe deserialization vulnerability assigned a severity score of Critical (CVSS 10.0). It allows an attacker to execute arbitrary code on a server simply by sending a malicious HTTP request, without requiring any login credentials or special privileges.
Note: While the core vulnerability is CVE-2025-55182 (React), Next.js specific tracking is often referenced as CVE-2025-66478. Both refer to the same root cause in this context
The vulnerability resides in the React Server Components (RSC) architecture, specifically within the "Flight" RPC (Remote Procedure Call) protocol used to communicate between the client and the server.
When a user interacts with a Next.js or React 19 application — for example, submitting a form via a Server Action — the data is serialized (converted into a string format) to be sent to the server. The server then deserializes this data to process the request.
The React Security Team and Vercel disclosed that the server-side deserializer failed to strictly validate incoming object keys.
The specific failure allows attackers to inject forbidden JavaScript properties — such as _ _proto_ _, constructor, or prototype — into the payload. This Server-Side Prototype Pollution effectively "poisons" the application state. When the server processes this polluted object, it unwittingly triggers a "gadget chain" that executes the attacker's system commands.
Because this vulnerability exists in the core React library handling Server Components, the blast radius is significant. It affects not just specific frameworks, but any toolchain leveraging RSC.
Primary Targets:
Unlike previous vulnerabilities that required specific, non-standard configurations to exploit, CVE-2025-55182 is actionable on default installations.
Note: Security researchers have confirmed that the attack vector is a simple HTTP POST request. If your application exposes a Server Action or an RSC endpoint to the public internet, it is effectively vulnerable until patched.
Given the "Critical" severity rating and the public availability of exploit code, immediate action is required. Mitigation strategies fall into two categories: Remediation (Patching), which is the only permanent fix, and Mitigation (WAF Rules), which serves as a temporary shield.
The React team and Vercel have coordinated a simultaneous release of patched versions. You must upgrade your dependencies to the versions listed below or higher.
If you are using React directly or a framework other than Next.js that relies on React 19, ensure react and react-dom are updated to:
Next.js users should upgrade to the latest patch release for their major version. Safe versions include:
Dependency warning: If you are using frameworks like Waku, RedwoodJS, or Parcel, you may not see a top-level update for your framework immediately. You must inspect your package-lock.json or yarn.lock to ensure the nested react version is resolved to one of the patched versions listed above.
Patching closes the door for future attacks, but it does not tell you if someone has already walked through it. To determine if your infrastructure was targeted or compromised prior to mitigation, you must analyze both your network logs and host behavior.
The first line of detection involves reviewing HTTP access logs for specific patterns associated with the "React2Shell" exploit.
Filter your logs for HTTP POST requests containing the headers next-action or rsc-action-id. While these are legitimate headers used by Next.js and React, an unusually high volume of these requests — especially from a single IP address — may indicate scanning activity.
The most reliable indicator is found within the request body. Search your WAF or load balancer logs for the following strings:
Look for a sudden spike in 500 Internal Server Errors on your RSC endpoints. Because exploit payloads are often unstable or trial-and-error based, attackers frequently crash the server process multiple times before successfully achieving code execution.
If an attacker successfully bypasses your network defenses, the evidence will reside on the server itself. Detection here relies on spotting behaviors that are technically possible but operationally abnormal for a web server, starting with how the application interacts with the underlying operating system.
This is the highest-fidelity indicator of a breach. In a standard React/Next.js environment, the node process should almost never spawn shell commands. Monitor your Endpoint Detection and Response (EDR) tools for node processes spawning:
Scanners and attackers often leave behind evidence in temporary directories. Check /tmp (Linux) or %TEMP% (Windows) for:
Additionally, monitor for unauthorized read attempts on sensitive system files, such as /etc/passwd or environment variable files (.env), which attackers often target immediately after gaining access.
To confirm if your application is still exposed without manually crafting exploits, utilize vulnerability scanners that have updated their definitions for CVE-2025-55182. Tools like UpGuard have released non-intrusive checks that send "probe" packets to check whether you are running a vulnerable environment, even if a firewall is protecting you.