
React2Shell Scanner (CVE-2025-55182 & CVE-2025-66478)
A non-intrusive detection tool for identifying vulnerable React Server Components (RSC) implementations affected by CVE-2025-55182 (React) and CVE-2025-66478 (Next.js). This tool performs active detection using benign, non-malicious payloads to determine if a server is vulnerable without executing any harmful code.
CVE-2025-55182 and CVE-2025-66478 are critical unauthenticated remote code execution (RCE) vulnerabilities in the React Server Components "Flight" protocol. These vulnerabilities affect:
react-server-dom versions 19.0.0, 19.1.0, 19.1.1, and 19.2.0The vulnerabilities stem from insecure deserialization in the RSC payload handling logic, allowing attacker-controlled data to influence server-side execution. Default configurations are vulnerable - a standard Next.js app created with create-next-app can be exploited without any code changes.
This tool performs active vulnerability detection by:
The tool uses three detection methods:
loadServerReference code patharrayBuffer code pathImportant: This tool does NOT execute any malicious code. It only sends carefully crafted benign payloads designed to trigger error responses that reveal the server's vulnerability status.
python react2shell_scanner.py --target https://example.com
python react2shell_scanner.py --target https://example.com --action-id YOUR_ACTION_ID
python react2shell_scanner.py --target https://example.com --verbose
[+] CVE-2025-55182 and CVE-2025-66478 Vulnerability Checker
[*] Target: https://example.com
[*] Action ID: c67c4e1a40fcc26b5e3c0d5d17f16786f4244989
[*] Test 1: Sending $F (Server Reference) payload...
Status: 500, Evidence: workers
[*] Test 2: Sending $L (Lazy) payload...
Status: 500, Evidence: arraybuffer
[+] Result:
[!] Status: LIKELY VULNERABLE
[!] Confidence: HIGH
[!] Evidence: workers
[!] Details: Server reached loadServerReference (Flight $F deserialization bypass)
[!] RECOMMENDATION: Upgrade to patched version
======================================================================
[+] CVE-2025-55182 and CVE-2025-66478 Vulnerability Checker
[*] Target: https://example.com
[*] Action ID: c67c4e1a40fcc26b5e3c0d5d17f16786f4244989
[*] Test 1: Sending $F (Server Reference) payload...
Status: 500, Evidence: could not find the module
[*] Test 2: Sending $L (Lazy) payload...
Status: 500, Evidence: in the react server manifest
[+] Result:
[+] Status: LIKELY NOT VULNERABLE
[+] Confidence: HIGH
[+] Evidence: could not find the module
[+] Details: Server rejected payload with security error (patched)
======================================================================
The tool looks for these error patterns that indicate vulnerability:
workers - Server reached loadServerReference (HIGH confidence)arraybuffer - Server reached $L type handler (HIGH confidence)cannot read properties of null (reading 'id') - Server reached loadServerReference with null metadata (HIGH confidence)entries - Server Action received deserialized object instead of FormData (MEDIUM confidence)temporary client reference - Server processed $T type reference (MEDIUM confidence)These error patterns indicate the server is patched:
could not find the modulein the react server manifestInvalid server referenceServer reference not foundUnexpected tokenis probably a bug in the react server components bundler| Product | Vulnerable Versions | Patched Versions |
|---|---|---|
react-server-dom | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| Next.js | 14.3.0-canary, 15.x, 16.x (App Router) | 14.3.0-canary.88, 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7 |
Other frameworks using RSC may also be affected:
Immediate action required: Upgrade to patched versions:
react-server-dom 19.0.1, 19.1.2, or 19.2.1react-server versionsThis tool is designed for defensive security testing and vulnerability assessment. It uses only benign payloads that do not execute malicious code. However:
This tool is provided "as-is" without warranty. The authors are not responsible for any misuse or damage caused by this tool. Always ensure you have proper authorization before testing any systems.
| Argument | Required | Default | Description |
|---|
--target | Yes | - | Target URL to check (must start with http:// or https://) |
--action-id | No | c67c4e1a40fcc26b5e3c0d5d17f16786f4244989 | Action ID to use in the payload |
--verbose, -v | No | False | Enable verbose output showing response bodies |