CatalogReact2Shell
React2Shell (CVE-2025-55182)
Framework react2shell
Unauthenticated remote code execution in React Server Components via unsafe deserialization of the RSC Flight protocol. CVSS 10.0. Exploited in the wild within hours of disclosure. Listed in CISA KEV on 5 Dec 2025.
- Aliases
- Published
- Updated
What the bug is
React2Shell is an unauthenticated remote code execution bug in React Server Components. Lachlan Davidson reported it to the React team on 29 Nov 2025. React published CVE-2025-55182 on 3 Dec 2025 and scored it CVSS 10.0.
The bug is unsafe deserialization in how React decodes payloads sent to React Server Function endpoints. An HTTP request to any Server Function endpoint can achieve code execution on the server. Apps that support React Server Components can be vulnerable even when they do not implement Server Function endpoints.
Affected packages include react-server-dom-webpack, react-server-dom-parcel, and react-server-dom-turbopack in React 19.0, 19.1.0, 19.1.1, and 19.2.0. Fixed in 19.0.1, 19.1.2, and 19.2.1. Frameworks that vendored or depended on those packages, including Next.js App Router 15.x and 16.x, were also affected. CVE-2025-66478 was later rejected as a duplicate of CVE-2025-55182.
Attack path
- Crafted requestAn unauthenticated HTTP request reaches a React Server Function or RSC endpoint.
- Unsafe decodeReact deserializes the Flight payload without enough validation.
- Server execution pathAttacker-controlled data influences server-side execution paths.
- Code execRemote code runs in the Node.js process that serves the app. Conceptual impact class only.
High-level only. Not a reproduction guide.
Exploitation status
CISA KEV
Listed in CISA KEV as of .
CISA KEV entry for CVE-2025-55182, Meta React Server Components Remote Code Execution Vulnerability. dateAdded 2025-12-05.
First seen
Seen . Source: AWS Security Blog / MadPot
Amazon threat intelligence teams observed exploitation attempts by China-nexus groups, including Earth Lamia and Jackpot Panda, within hours of public disclosure on 3 Dec 2025.
What defenders should do today
Do today
- 1
Patch React Server Components packages
Upgrade react-server-dom-webpack, react-server-dom-parcel, and react-server-dom-turbopack to 19.0.1, 19.1.2, or 19.2.1. Apps that do not use a server, or that do not use an RSC-capable framework or bundler, are not affected per the React advisory.
- 2
Patch Next.js App Router lines
Upgrade Next.js 15.x and 16.x to the fixed release for your line (for example 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, or 16.0.7). Next.js states there is no workaround. The npx fix-react2shell-next helper can check and bump versions.
- 3
Rotate secrets if exposed while unpatched
Next.js recommends rotating secrets for apps that were online and unpatched as of 4 Dec 2025, 13:00 PT, starting with the most critical ones.
This week
- 1
Review application and reverse-proxy logs
Look for POST requests with next-action or rsc-action-id headers, request bodies containing $@ or status resolved_model patterns, and unexpected process execution or file writes on app servers.
Ongoing
- 1
Treat WAF rules as interim only
Hosting providers and WAFs published temporary mitigations. React and Next.js both say those are not a substitute for patching.
Detection rules
Sigma
Linux Suspicious Child Process from Node.js - React2Shell
title: Linux Suspicious Child Process from Node.js - React2Shell id: c70834fa-fb9d-4aa0-9e7d-45ceed36f3f7 related: - id: 271de298-cc0e-4842-acd8-079a0a99ea65 type: similar status: experimental description: | Detects suspicious child processes spawned from Node.js server processes on Linux systems, potentially indicating remote code execution exploitation such as CVE-2025-55182 (React2Shell). This rule particularly looks for exploitation of vulnerability on Node.js Servers where attackers abuse Node.js child_process module to execute arbitrary system commands. When execSync() or exec() is used, the command line often includes a shell invocation followed by suspicious commands or scripts (e.g., /bin/sh -c <malicious-command>). For other methods, the Image field will show the spawned process directly. references: - https://github.com/msanft/CVE-2025-55182 - https://nodejs.org/api/child_process.html#class-childprocess - https://gist.github.com/swachchhanda000/a0228130f86a2dedfbcebb415b47f870 - https://github.com/nasbench/Misc-Research/blob/2f651ede832ab34027a7ba005b63bb78f1ade378/Other/React-Next-Child-Processes-Notes.md author: Swachchhanda Shrawan Poudel (Nextron Systems), Nasreddine Bencherchali date: 2025-12-05 tags: - attack.execution - attack.t1059 - attack.initial-access - attack.t1190 - detection.emerging-threats - cve.2025-55182 logsource: category: process_creation product: linux detection: selection_parent: ParentImage|endswith: '/node' ParentCommandLine|contains: - '--experimental-https' - '--experimental-next-config-strip-types' - '/node_modules/next' - 'next dev' - 'next start' - 'node_modules/.bin' - 'react-scripts start' - 'start-server.js' selection_generic_child_img: # Observed when child_process.spawn(), child_process.exec(), child_process.execFile(), or child_process.fork() method is used to spawn suspicious processes in exploit - Image|endswith: - '/busybox' - '/cat' - '/curl' - '/dash' - '/dig' - '/head' - '/id' - '/ifconfig' - '/ip' - '/java' - '/less' - '/lua' - '/more' - '/nc' - '/ncat' - '/netcat' - '/netstat' - '/nslookup' - '/perl' - '/ping' - '/python' - '/python2' - '/ruby' - '/socat' - '/tail' - '/wget' - '/whoami' - Image|contains: '/python' selection_generic_child_cli: # Observed when child_process.execSync() is used to spawn suspicious processes # Reference: https://nodejs.org/api/child_process.html#child_processexecsynccommand-options # By default, the cli will look something like `/bin/sh -c .......` CommandLine|contains: - '/dev/tcp/' - '/dev/udp/' - '/etc/hosts' - '/etc/passwd' - '/etc/shadow' - 'base64' - 'cat ' - 'curl' - 'dig' - 'ifconfig' - 'IO::Socket::INET' - 'java' - 'less ' - 'lua' - 'mkfifo ' - 'more' - 'nc ' - 'ncat' - 'netcat' - 'netstat' - 'nslookup' - 'perl' - 'php' - 'ping' - 'ps -ef' - 'ps aux' - 'python' - 'rcat' - 'ruby' - 'sh -i 2>&1' - '-c id' - 'socat' - 'uname' - 'wget' - 'whoami' selection_specific_sh: Image|endswith: '/sh' selection_specific_cli: Image|endswith: '-c' filter_main_default_shell_flag: Image|endswith: '-c' condition: selection_parent and ( 1 of selection_generic_* or (selection_specific_sh and not filter_main_default_shell_flag) or (all of selection_specific_* and selection_generic_child_cli) ) falsepositives: - Unknown level: highBy Swachchhanda Shrawan Poudel (Nextron Systems), Nasreddine Bencherchali, . Source. License: DRL-1.1
Windows Suspicious Child Process from Node.js - React2Shell
title: Windows Suspicious Child Process from Node.js - React2Shell id: 271de298-cc0e-4842-acd8-079a0a99ea65 related: - id: c70834fa-fb9d-4aa0-9e7d-45ceed36f3f7 type: similar status: experimental description: | Detects suspicious child processes started by Node.js server processes on Windows, which may indicate exploitation of vulnerabilities like CVE-2025-55182 (React2Shell). Attackers can abuse the Node.js 'child_process' module to run system commands or scripts using methods such as spawn(), exec(), execFile(), fork(), or execSync(). If execSync() or exec() is used in the exploit, the command line often shows a shell (e.g., cmd.exe /d /s /c ...) running a suspicious command unless other shells are explicitly invoked. For other methods, the spawned process appears directly in the Image field unless a shell is explicitly used. references: - https://github.com/msanft/CVE-2025-55182 - https://nodejs.org/api/child_process.html#class-childprocess - https://gist.github.com/swachchhanda000/a0228130f86a2dedfbcebb415b47f870 - https://github.com/nasbench/Misc-Research/blob/2f651ede832ab34027a7ba005b63bb78f1ade378/Other/React-Next-Child-Processes-Notes.md author: Swachchhanda Shrawan Poudel (Nextron Systems), Nasreddine Bencherchali date: 2025-12-05 tags: - attack.execution - attack.t1059 - attack.initial-access - attack.t1190 - detection.emerging-threats - cve.2025-55182 logsource: category: process_creation product: windows detection: selection_parent: ParentImage|endswith: '\node.exe' ParentCommandLine|contains: - '--experimental-https' - '--experimental-next-config-strip-types' - '\node_modules\next' - 'next dev' - 'next start' - 'next" start' - 'node_modules\\.bin\\\\..\\next' # We escape every backslash to avoid confusion - 'react-scripts start' - 'start-server.js' selection_generic_child_img: # Observed when child_process.spawn(), child_process.exec(), child_process.execFile(), or child_process.fork() method is used to spawn suspicious processes - Image|endswith: - '\bash.exe' - '\bitsadmin.exe' - '\certutil.exe' - '\cscript.exe' - '\curl.exe' - '\ipconfig.exe' - '\mshta.exe' - '\net.exe' - '\net1.exe' - '\netsh.exe' - '\nslookup.exe' - '\OpenConsole.exe' - '\perl.exe' - '\ping.exe' - '\powershell.exe' - '\pwsh.exe' - '\py.exe' - '\python.exe' - '\pythonw.exe' - '\pyw.exe' - '\reg.exe' - '\regsvr32.exe' - '\rundll32.exe' - '\sc.exe' - '\sh.exe' - '\systeminfo.exe' - '\wget.exe' - '\whoami.exe' - '\wmic.exe' - '\wscript.exe' - '\wt.exe' - Image|contains: '\python' selection_generic_child_cli_susp_pattern: # Observed when child_process.execSync() is used to spawn suspicious processes # Reference: https://nodejs.org/api/child_process.html#child_processexecsynccommand-options # In default, the cli will look something like `C:\WINDOWS\System32\cmd.exe /d /s /c "...susp..cli...."` CommandLine|contains: - '\net' - 'bitsadmin' - 'certutil ' - 'conhost --headless' - 'cscript ' - 'curl' - 'ipconfig' - 'java' - 'lua' - 'mshta' - 'netsh' - 'nslookup ' - 'perl' - 'ping ' - 'powershell' - 'pwsh' - 'python' - 'reg ' - 'reg.exe' - 'regsvr32' - 'ruby' - 'rundll32' - 'sc.exe' - 'systeminfo' - 'wget' - 'whoami' - 'wmic' - 'wscript' selection_specific_cmd: Image|endswith: '\cmd.exe' selection_specific_cli: CommandLine|contains: '/d /s /c ' filter_main_default_shell_flag: CommandLine|contains: '/d /s /c ' filter_main_cli_git: CommandLine|contains: 'git config --local --get remote.origin.url' filter_main_cli_netstat: CommandLine|contains|all: - 'netstat -ano | findstr /C:' - ' | findstr LISTENING' filter_main_cli_mkcert_install: CommandLine|contains|all: - '\mkcert\' - ' -install ' filter_main_cli_mkcert_caroot: CommandLine|contains|all: - '\mkcert\' - ' -CAROOT' condition: selection_parent and ( 1 of selection_generic_* or (selection_specific_cmd and not filter_main_default_shell_flag) or (all of selection_specific_* and not 1 of filter_main_cli_*) ) falsepositives: - Unknown level: high regression_tests_path: regression_data/rules-emerging-threats/2025/Exploits/CVE-2025-55182/proc_creation_win_exploit_cve_2025_55182_susp_nodejs_server_child_process/info.ymlBy Swachchhanda Shrawan Poudel (Nextron Systems), Nasreddine Bencherchali, . Source. License: DRL-1.1
SPL (Splunk)
Linux Suspicious React or Next.js Child Process
| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name = "node" Processes.parent_process IN ( "*--experimental-https*", "*--experimental-next-config-strip-types*", "*/node_modules/next*", "*next dev*", "*next start*", "*node_modules/.bin*", "*react-scripts start*", "*start-server.js*" ) AND ( Processes.process_name IN ( "awk", "gawk", "ifconfig", "lua", "nc", "ncat", "netcat", "openssl", "perl", "php", "python", "python2", "python3", "ruby", "socat", "telnet" ) OR ( Processes.process_name IN ("curl", "wget") Processes.process = "*|*" ) OR ( Processes.process_name IN ( "bash", "dash", "sh" ) NOT Processes.process = "*-c*" ) OR ( Processes.process_name IN ( "bash", "dash", "ksh", "sh", "zsh" ) Processes.process IN ( "*/dev/tcp/*", "*/dev/udp/*", "*0>&1*", "*curl*", "*exec *>&*", "*fsockopen*", "*ifconfig*", "*mkfifo*", "*nc *", "*ncat*", "*netcat*", "*proc_open*", "*s_client*", "*socat*", "*socket*", "*subprocess*", "*TCPSocket*", "*wget*" ) ) ) by Processes.action Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `linux_suspicious_react_or_next_js_child_process_filter`By Nasreddine Bencherchali, Splunk, . Source. License: Apache-2.0
Uses Splunk ES macros and data models from splunk/security_content; the trailing _filter macro is a tuning hook.
KQL (Microsoft Sentinel / Defender)
Suspicious commands initiated by the next-server parent process (Linux)
Hunting querylet lookback = 10d; DeviceProcessEvents | where Timestamp >= ago(lookback) | where InitiatingProcessFileName == "node" | where InitiatingProcessCommandLine has_any (" server.js", " start", "/server.js") | where ProcessCommandLine has_any ("| sh", "openssl,", "/dev/tcp/", "| bash", "|sh", "|bash", "bash,", "{sh,}", "SOCK_STREAM", "bash -i", "whoami", "| base64 -d", "chmod +x /tmp", "chmod 777") | where ProcessCommandLine !contains "vscode" and ProcessCommandLine !contains "/.claude/" and ProcessCommandLine !contains "/claude"By Microsoft Defender Security Research Team, . Source. License: Posted publicly; see source
Short hunting query copied from the blog's Defender XDR section; more queries there.
LogScale (CrowdStrike)
Shell or downloader spawned by Node.js (Falcon)
#event_simpleName=ProcessRollup2 event_platform=Lin | ParentBaseFileName=node | FileName=/^(sh|bash|dash|curl|wget|nc|ncat|socat|python3?)$/i | groupBy([aid, ComputerName, FileName, CommandLine], limit=max)By vuln2shell, . Source. License: CC0 1.0
Written by vuln2shell. Untested, tune before use.
Falcon version of a subset of the child-process list in the SigmaHQ React2Shell rule. Falcon ProcessRollup2 has no parent command line, so it cannot narrow to Next.js servers; scope by host group.
ES|QL / EQL (Elastic)
React2Shell (CVE-2025-55182) Exploitation Attempt
network where http.request.method == "POST" and ( // Successful CVE-2025-55182 RCE - command output in digest ( http.response.status_code in (500, 303) and http.response.body.content like~ "*E{\"digest\"*" and http.request.body.content regex~ """.*\$[0-9]+:[a-zA-Z_0-9]+:[a-zA-Z_0-9]+.*""" ) or // Prototype pollution attempts in RSC Flight data (never legitimate) ( http.request.body.content regex~ """.*\$[0-9]+:[a-zA-Z_0-9]+:[a-zA-Z_0-9]+.*""" and ( http.request.body.content like~ "*__proto__*" or http.request.body.content like~ "*prototype*" ) ) )
Suricata / Snort
ET WEB_SPECIFIC_APPS React Server Components React2Shell Unsafe Flight Protocol Property Access (CVE-2025-55182)
alert http any any -> $HOME_NET any (msg:"ET WEB_SPECIFIC_APPS React Server Components React2Shell Unsafe Flight Protocol Property Access (CVE-2025-55182)"; flow:established,to_server; http.header; to_lowercase; content:"next-action|3a 20|"; fast_pattern; http.content_type; content:"multipart/form-data|3b|"; http.request_body; content:"|24 40|"; pcre:"/^[0-9a-fA-F]+\x22?[\x0d\x0a]+/R"; content:"|22|_prefix|22|"; content:"|22|_formData|22|"; content:"|22 24|"; pcre:"/^[0-9a-fA-F]+\x3a(?:__proto__|constructor|Module)\x3a/R"; http.method; content:"POST"; reference:url,react2shell.com/; reference:cve,2025-55182; classtype:web-application-attack; sid:2066027; rev:4; metadata:affected_product Next_js, affected_product React, attack_target Server, tls_state TLSDecrypt, created_at 2025_12_04, cve CVE_2025_55182, deployment Perimeter, deployment Internal, deployment SSLDecrypt, confidence Medium, signature_severity Major, tag Exploit, updated_at 2026_04_30, mitre_tactic_id TA0001, mitre_tactic_name Initial_Access, mitre_technique_id T1190, mitre_technique_name Exploit_Public_Facing_Application; target:dest_ip;)By Emerging Threats (Proofpoint), . Source. License: BSD-3-Clause (ET Open, sids 2000000-2799999)
Needs decrypted HTTP to see request bodies.
YARA
EXPL_RCE_React_Server_Next_JS_CVE_2025_66478_Errors_Dec25
rule EXPL_RCE_React_Server_Next_JS_CVE_2025_66478_Errors_Dec25 { meta: description = "Detects error messages caused by the exploitation of the React Server Remote Code Execution Vulnerability (CVE-2025-55182) in Next.js applications (CVE-2025-66478). This can also be caused by vulnerability scanning." author = "Florian Roth" reference = "https://github.com/Malayke/Next.js-RSC-RCE-Scanner-CVE-2025-66478" date = "2025-12-05" score = 65 id = "6baeb522-6299-56a2-be27-21c6b668439b" strings: $s1 = "[Error: NEXT_REDIRECT]" $s2 = "digest: 'uid=0(root) gid=0(root)" condition: all of them }By Florian Roth, . Source. License: DRL-1.1
Flags error messages left in Next.js logs by exploitation. Scanners trigger it too.
More detection content
- Microsoft: Defending against CVE-2025-55182 (React2Shell)
By Microsoft Defender Security Research Team, . More Defender XDR and Sentinel queries (encoded PowerShell, Windows next-server children, CloudAuditEvents).
- Elastic: Suspicious React Server Child Process
By Elastic, . EQL, Elastic License 2.0.
- Splunk: Windows Suspicious React or Next.js Child Process
By Splunk Threat Research Team
- signature-base: React2Shell campaign YARA (ZinFoq, CowTunnel, PeerBlight)
By RussianPanda,
- AWS: China-nexus groups rapidly exploit React2Shell
By AWS Security,
Vendor signatures
| Signal | Log source | What to look for |
|---|---|---|
| AWS WAF managed rule set | AWS WAF event logs | AWSManagedRulesKnownBadInputsRuleSet version 1.24 or higher includes updated rules for CVE-2025-55182. |
Affected frameworks and versions
Affected frameworks
| Framework | Status | Fixed version / ETA | Advisory |
|---|---|---|---|
| react-server-dom-webpack / parcel / turbopack | Affected | 19.0.1, 19.1.2, 19.2.1 | The vulnerability is present in versions 19.0, 19.1.0, 19.1.1, and 19.2.0. A fix was introduced in versions 19.0.1, 19.1.2, and 19.2.1. Source |
| Next.js App Router | Affected | 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7 | Applications using React Server Components with the App Router are affected when running Next.js 15.x, 16.x, and 14.3.0-canary.77 and later canary releases. Next.js 13.x, Next.js 14.x stable, Pages Router applications, and the Edge Runtime are not affected. Source |
| React Router (unstable RSC APIs) | Affected | latest packages per React advisory | The following React frameworks and bundlers are affected: next, react-router, waku, @parcel/rsc, @vitejs/plugin-rsc, and rwsdk. Source |
| Waku / Parcel RSC / Vite RSC plugin / RedwoodSDK | Affected | latest packages per React advisory | The following React frameworks and bundlers are affected: next, react-router, waku, @parcel/rsc, @vitejs/plugin-rsc, and rwsdk. Source |
Timeline8
Key events
Newest first.
CISA adds CVE-2025-55182 to the Known Exploited Vulnerabilities catalog.
SourceLachlan Davidson publishes original public PoCs on GitHub.
SourceWiz Research reports compromised Next.js applications starting 6:00 UTC, with credential theft and cryptomining.
SourceAWS MadPot records exploitation attempts from China-nexus infrastructure.
SourceReact publishes CVE-2025-55182 and patched packages 19.0.1, 19.1.2, and 19.2.1.
SourceNext.js publishes CVE-2025-66478 for App Router impact and lists fixed 15.x and 16.x releases.
SourceLachlan Davidson reports the vulnerability to the React team.
Source
Full timeline (8)
Fri 5 Dec 20254
CISA adds CVE-2025-55182 to the Known Exploited Vulnerabilities catalog.
SourceLachlan Davidson publishes original public PoCs on GitHub.
SourceWiz Research reports compromised Next.js applications starting 6:00 UTC, with credential theft and cryptomining.
SourceGreyNoise reports opportunistic scanning from 95 IP addresses beginning 04:00 UTC.
Source
Thu 4 Dec 20251
AWS MadPot records exploitation attempts from China-nexus infrastructure.
Source
Wed 3 Dec 20252
Sat 29 Nov 20251
Lachlan Davidson reports the vulnerability to the React team.
Source
News & write-ups
Research4
Vendor2
PoC index (for defenders)
Public proof-of-concept links for defensive validation, with a source and a validation status.
- Original React2Shell PoCsValidated
Discoverer-published original PoCs. Created 5 Dec 2025. AWS and Wiz note many other public PoCs are invalid or require unsafe server manifests.