CVSS 10.0 RCE in React Server Components. Is your React 19 app vulnerable?
Fast, accurate scanner for CVE-2025-55182 (React2Shell) - a critical remote code execution vulnerability exploited in the wild. Zero false positives with intelligent Server Components detection.
React2Shell is a maximum severity (10.0 CVSS) vulnerability in React Server Components that allows unauthenticated remote code execution. Attackers can exploit this through specially crafted HTTP requests to Server Function endpoints.
Key Facts:
- Affected: React 19.x and Next.js 15.x/16.x (with React 19)
- Attack Vector: Network (no authentication required)
- Impact: Complete server compromise (RCE)
- Disclosure: December 3, 2025
- Exploitation: Near 100% success rate in default configurations
# Option A: Node.js scanner (recommended - cross-platform, no dependencies)
npx react2shell-scanner /path/to/your/project
# Option B: Direct download and run
curl -sSL https://raw.githubusercontent.com/nxgn-kd01/react2shell-scanner/main/scan.js > scan.js
node scan.js /path/to/your/project
# Option C: Clone and run
git clone https://github.com/nxgn-kd01/react2shell-scanner.git
cd react2shell-scanner
node scan.js /path/to/your/projectResults in seconds: 🚨 Vulnerable |
This tool performs intelligent vulnerability detection:
- Detects vulnerable React 19.0.0, 19.1.0, 19.1.1, 19.2.0
- Confirms React 18.x apps are safe (prevents false positives)
- Identifies react-server-dom-* packages
- Scans Next.js 14.3.x-canary, 15.x, 16.x versions
- Validates React 19 dependency (required for vulnerability)
- Detects static export mode (Server Components disabled = safe)
- Only flags apps with React 19 + Server Components
- Provides context for edge cases
- Explains why projects are/aren't vulnerable
- Recursive directory scanning
- Detects npm, yarn, and pnpm projects
- Generates project-specific fix commands
| Property | Value |
|---|---|
| CVE ID | CVE-2025-55182 |
| Name | React2Shell |
| CVSS Score | 10.0 (CRITICAL) |
| CVSS Vector | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Attack Vector | Network |
| Authentication | None required |
| Impact | Complete system compromise |
React:
19.0.0,19.1.0,19.1.1,19.2.0
React Server DOM Packages:
react-server-dom-webpack19.0.0 - 19.2.0react-server-dom-parcel19.0.0 - 19.2.0react-server-dom-turbopack19.0.0 - 19.2.0
Next.js:
14.3.0-canary.0to14.3.0-canary.8715.0.0to15.0.415.1.0to15.1.815.2.0to15.2.515.3.0to15.3.515.4.0to15.4.715.5.0to15.5.616.0.0to16.0.6
React: 19.2.1 or later
Next.js:
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+
Node.js Scanner (Recommended):
- Node.js 12+ (cross-platform, no dependencies)
Bash Scanner:
- Bash 3.2+ (macOS/Linux)
- jq (JSON processor)
# Install jq (if using Bash scanner)
# macOS
brew install jq
# Ubuntu/Debian
sudo apt-get install jq
# RHEL/CentOS
sudo yum install jqOption A: Clone (Recommended for users)
# Clone the repository
git clone https://github.com/nxgn-kd01/react2shell-scanner.git
cd react2shell-scanner
# Make scripts executable
chmod +x scan.sh scan.jsOption B: Fork (Recommended for contributors)
# Fork on GitHub (click "Fork" button on repository page)
# Then clone your fork
git clone https://github.com/YOUR_USERNAME/react2shell-scanner.git
cd react2shell-scanner
# Make scripts executable
chmod +x scan.sh scan.js
# Add upstream remote to stay updated
git remote add upstream https://github.com/nxgn-kd01/react2shell-scanner.gitOption C: Direct Download
# Node.js version (recommended - cross-platform)
curl -O https://raw.githubusercontent.com/nxgn-kd01/react2shell-scanner/main/scan.js
chmod +x scan.js
# Bash version (Unix/Linux/macOS only)
curl -O https://raw.githubusercontent.com/nxgn-kd01/react2shell-scanner/main/scan.sh
chmod +x scan.sh🔍 Scan current directory:
# Using Node.js (recommended)
node scan.js
# Using Bash
./scan.sh📁 Scan specific project:
node scan.js /path/to/project
./scan.sh /path/to/project🗂️ Recursive scan (all subdirectories):
node scan.js -r
./scan.sh -rJSON output (for automation):
node scan.js --json
./scan.sh --jsonCI/CD mode (exits with code 1 if vulnerable):
node scan.js --ci
./scan.sh --ciVerbose output:
node scan.js -v
./scan.sh -vCombine options:
node scan.js /path/to/projects -r --json --ci
./scan.sh /path/to/projects -r --json --ci| Option | Description |
|---|---|
-r, --recursive |
Scan all subdirectories for Node.js projects |
-v, --verbose |
Show detailed output |
--json |
Output results as JSON |
--ci |
Exit with code 1 if vulnerabilities found (for CI/CD) |
-h, --help |
Show help message |
| Code | Meaning |
|---|---|
| 0 | No vulnerabilities found |
| 1 | Vulnerabilities found (when using --ci flag) |
| 2 | Scan error occurred |
$ node scan.js ~/my-react-app
╔════════════════════════════════════════════════════════════╗
║ CVE-2025-55182 Scanner (React2Shell) ║
╚════════════════════════════════════════════════════════════╝
Severity: CRITICAL (CVSS 10.0)
Description: Unauthenticated RCE in React Server Components
Scan Summary:
Total projects: 1
Vulnerable: 1
Safe: 0
⚠ VULNERABLE PROJECTS FOUND:
1. /Users/user/my-react-app
└─ react 19.0.0 → 19.2.1
└─ next 15.0.3 → 15.0.5
Fix command:
$ cd /Users/user/my-react-app
$ npm install react@19.2.1 next@15.0.5$ node scan.js ~/projects -r --json > results.json{
"vulnerability": "CVE-2025-55182",
"severity": "CRITICAL",
"cvss": 10.0,
"scanned": 5,
"vulnerable": 2,
"results": [
{
"path": "/Users/user/projects/app1",
"vulnerable": true,
"packages": [
{
"name": "react",
"version": "19.0.0",
"fixVersion": "19.2.1"
}
],
"packageManager": "npm",
"fixCommands": [
"cd /Users/user/projects/app1",
"npm install react@19.2.1"
]
}
]
}.github/workflows/security-scan.yml
name: CVE-2025-55182 Security Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Download CVE-2025-55182 Scanner
run: |
curl -O https://raw.githubusercontent.com/nxgn-kd01/cve-2025-55182-scanner/main/scan.js
chmod +x scan.js
- name: Scan for vulnerabilities
run: node scan.js --ciGitLab CI (.gitlab-ci.yml)
security-scan:
stage: test
image: node:18
script:
- curl -O https://raw.githubusercontent.com/nxgn-kd01/cve-2025-55182-scanner/main/scan.js
- chmod +x scan.js
- node scan.js --ci
allow_failure: falseThe scanner performs the following checks:
- Locates Node.js projects by finding
package.jsonfiles - Parses dependencies from both
dependenciesanddevDependencies - Checks versions against known vulnerable versions:
- React 19.0.0, 19.1.0, 19.1.1, 19.2.0
- React Server DOM packages (same versions)
- Next.js version ranges (14.3.x, 15.x, 16.x)
- Validates actual vulnerability by checking:
- React version (only React 19 is affected - React 18 is safe)
- Configuration (static exports don't use Server Components)
- Detects package manager (npm, yarn, or pnpm)
- Generates fix commands with appropriate upgrade syntax
- Reports findings in human-readable or JSON format
The scanner includes intelligent detection to prevent false positives:
- React Version Check: Next.js apps are only flagged if React 19 is present (React 18 is safe)
- Static Export Detection: Projects using
output: 'export'are marked as likely safe - Contextual Warnings: Provides explanations for why projects are or aren't vulnerable
- Conservative Approach: Warns about edge cases that may need manual review
Example Output:
✓ No vulnerable projects found
ℹ Projects with analysis notes:
1. /path/to/project
ℹ Next.js ^15.1.3 is in vulnerable range, but using React 18 (safe - only React 19 affected)
node scan.js -rFor each vulnerable project, run the suggested fix command:
cd /path/to/project
npm install react@19.2.1 next@15.0.5 # ExampleOr with yarn:
yarn upgrade react@19.2.1 next@15.0.5Or with pnpm:
pnpm update react@19.2.1 next@15.0.5npm test
npm run buildnode scan.js --ciA: Currently, the scanner checks direct dependencies in package.json. For deep dependency scanning, use npm audit or yarn audit in combination with this tool.
A: No, React 18 is NOT affected ✅
CVE-2025-55182 only affects React 19.x Server Components. The scanner will correctly identify React 18 apps as safe, even if using Next.js 15.x or 16.x versions that are in the vulnerable range.
A: Yes! Use the --ci flag to make the scanner exit with code 1 if vulnerabilities are found, which will fail your pipeline. See CI/CD integration examples above.
A: Temporary mitigations (upgrading is the only definitive fix):
- ⛔ Disable Server Components in your application
- 🛡️ Add WAF rules to block suspicious RSC payloads
- 📊 Monitor logs for exploitation attempts
- ⏰ Plan an emergency upgrade window
A: Very accurate with intelligent false positive prevention:
- ✅ Checks exact version matches against official CVE advisory
- ✅ Validates React 19 dependency (prevents React 18 false positives)
- ✅ Detects static export configuration
- ✅ Provides contextual warnings for edge cases
Contributions are welcome! Please feel free to submit issues or pull requests.
# Test on sample projects
./test-scanner.shIf you're using other RSC-enabled frameworks (Remix, Waku, etc.), please open an issue or submit a PR with detection logic.
- NVD CVE-2025-55182
- React Security Advisory
- Wiz Research: React2Shell Analysis
- Tenable: CVE-2025-55182 FAQ
- Vercel Advisory
MIT License - see LICENSE file for details
This tool is provided as-is for the community to help identify vulnerable projects. Always verify scanner results and test updates in a safe environment before deploying to production.
If you find this tool helpful, please:
- ⭐ Star this repository
- 🐛 Report issues
- 🔄 Share with your team
- 🤝 Contribute improvements
Stay safe and keep your dependencies updated!