CVE-2025-55182: Verified Repro With Script Download
CVE-2025-55182: React Server Components Flight protocol remote code execution
CVE-2025-55182 is verified against react-server-dom-webpack · npm. Affected versions: 19.0.0, 19.1.0, 19.1.1, 19.2.0. Fixed in 19.0.1, 19.1.2, 19.2.1. Vulnerability class: RCE. This critical reproduction includes runnable sandbox proof, artifacts, and a plain-text agent view under REPRO-2026-00196.
What Is CVE-2025-55182?
CVE-2025-55182 is a critical (CVSS 10) pre-authentication remote code execution vulnerability affecting React Server Components server packages react-server-dom-webpack, react-server-dom-parcel, and react-server-dom-turbopack, where unsafe deserialization of the Flight protocol lets an unauthenticated attacker execute arbitrary code via a crafted HTTP request. Pruva reproduced it (reproduction REPRO-2026-00196).
CVE-2025-55182 Severity & CVSS Score
CVE-2025-55182 is rated critical severity, with a CVSS base score of 10.0 out of 10.
Critical — the most severe class — typically remotely exploitable with severe impact. Treat as an emergency.
Affected react-server-dom-webpack Versions
react-server-dom-webpack · npm versions 19.0.0, 19.1.0, 19.1.1, 19.2.0 are affected.
How to Reproduce CVE-2025-55182
pruva-verify REPRO-2026-00196 curl -O https://pruva.dev/api/v1/reproductions/REPRO-2026-00196/artifacts/bundle/repro/reproduction_steps.sh && chmod +x reproduction_steps.sh && ./reproduction_steps.sh Proof of Reproduction for CVE-2025-55182
- reached the target end-to-end
- full exploit chain demonstrated
- high confidence
- the upstream fix blocks the same trigger
HTTP POST multipart/form-data body with Next-Action header
- POST /
- decodeReply()
- Flight protocol reference resolution
- prototype chain
- Function constructor
- execSync
How the agent worked
Root Cause and Exploit Chain for CVE-2025-55182
Vulnerability Summary
CVE: CVE-2025-55182 Product: npm:react-server-dom-webpack (also react-server-dom-parcel, react-server-dom-turbopack) Affected Versions: 19.0.0, 19.1.0-19.1.1, 19.2.0 Fixed Versions: 19.0.1, 19.1.2, 19.2.1 Severity: Critical (CVSS 10.0) Impact: Pre-authentication Remote Code Execution Surface: API Remote (HTTP POST to Server Function endpoint)
Root Cause
The vulnerability exists in the Flight protocol deserialization code of
react-server-dom-webpack/server, specifically in the decodeReply()
function that processes attacker-controlled multipart/form-data payloads
from HTTP requests to Server Function endpoints.
The core flaw is in reference resolution: when the Flight protocol
encounters references like $1:property:property, it traverses object
properties without checking hasOwnProperty(). This allows an attacker
to traverse the JavaScript prototype chain and reach dangerous built-in
constructors:
$1:__proto__:thenresolves toChunk.prototype.then(the realthenmethod on Chunk objects, accessed via the prototype chain)$1:constructor:constructorresolves toFunction(the JavaScript Function constructor, accessed viaObject.constructor.constructor)
Exploit Mechanism
The exploit (based on the public PoC by researcher maple3142) crafts a
multipart/form-data body with two form fields:
Field "0": A JSON model object containing:
then: "$1:__proto__:then"— sets the chunk'sthentoChunk.prototype.thenvia prototype chain traversalstatus: "resolved_model"— triggersinitializeModelChunk()on the fake chunk when it is awaited_response._prefix— the attacker's code string (e.g.,process.mainModule.require('child_process').execSync('id'))_response._formData.get: "$1:constructor:constructor"— resolves to theFunctionconstructor via prototype chain
Field "1":
"$@0"— creates a Chunk reference to field "0"'s value
When decodeReply() processes this FormData:
- Field "1" (
$@0) creates a Chunk reference to field "0" - The model object from field "0" is parsed
- When the chunk is awaited,
Chunk.prototype.thenruns with the fake model object asthis status: "resolved_model"triggersinitializeModelChunk()initializeModelChunk()accesses_response._formData.get(which is theFunctionconstructor) with_response._prefix(the code string)new Function(codeString)()executes arbitrary code on the server
A single unauthenticated POST request with a Next-Action header triggers
this chain, achieving remote code execution.
Evidence of Reproduction
Vulnerable Version (react-server-dom-webpack@19.2.0)
- Server started: Health check passed (
HEALTHY 19.2.0) - Exploit sent: POST with
Next-Action: xheader and craftedmultipart/form-databody - RCE confirmed: The
idcommand executed on the server, writinguid=1000(vscode) gid=1000(vscode) groups=1000(vscode),962(962)to a marker file - Stack trace: Server log shows the code executed via
evalatparseModelStringinreact-server-dom-webpack-server.node.unbundled.development.js
Fixed Version (react-server-dom-webpack@19.2.1) — Negative Control
- Server started: Health check passed (
HEALTHY 19.2.1) - Same exploit sent: Identical POST request
- RCE blocked:
decodeReply()completed normally, returning[object Object]without executing any code - No marker file created: The
hasOwnProperty()checks added in the patch prevent prototype chain traversal, blocking theFunctionconstructor access
The Fix
The patch (in versions 19.0.1, 19.1.2, 19.2.1) adds explicit
hasOwnProperty() checks before returning values from module export
objects during reference resolution. This prevents attacker-controlled keys
from resolving inherited prototype properties, blocking the prototype-chain
access that enabled the Function constructor gadget.
Additionally, the patch improves multipart payload decoding robustness by adding error handling around field and file processing.
Reproduction Environment
- Node.js: v24.15.0
- OS: Ubuntu 26.04 LTS
- Vulnerable package: react-server-dom-webpack@19.2.0
- Fixed package: react-server-dom-webpack@19.2.1
- Server: Minimal HTTP server calling
decodeReply()with--conditions react-serverflag - Exploit: Python client sending the crafted multipart POST
Artifacts
logs/server_vuln.log— vulnerable server log showing decodeReply calllogs/server_fixed.log— fixed server log showing normal completionrepro/artifacts/request_vuln.txt— raw HTTP exploit requestrepro/artifacts/response_vuln.txt— HTTP response (timeout, expected)repro/artifacts/request_fixed.txt— same request against fixed versionrepro/artifacts/response_fixed.txt— HTTP 200 with normal resultrepro/artifacts/rce_marker_vuln.txt—idcommand output proving RCErepro/runtime_manifest.json— structured runtime evidence
CVE-2025-55182 Reproduction Transcript
The agent's step-by-step process — every tool call, every handoff, the moment the exploit fired.
Full session Replay every step — scrub the timeline or play it back.
node --version 2>/dev/null; npm --version 2>/dev/null; python3 --version; which npx; echo "---"; cat /etc/os-release 2>/dev/null | head -3; echo "memory:"; free -h 2>/dev/null | head -2; echo "disk:"; df -h / 2>/dev/null | tail -1v24.15.0 11.12.1 Python 3.14.4 /usr/bin/npx --- PRETTY_NAME="Ubuntu 26.04 LTS" NAME="Ubuntu" VERSION_ID="26.04"
Artifacts and Evidence for CVE-2025-55182
Scripts, logs, diffs, and output captured during the reproduction.
How to Fix CVE-2025-55182
Upgrade react-server-dom-webpack · npm to 19.0.1, 19.1.2, 19.2.1 or later.
FAQ: CVE-2025-55182
How does the CVE-2025-55182 Flight-protocol RCE exploit work?
Which versions of react-server-dom-webpack are affected by CVE-2025-55182, and where is it fixed?
How severe is CVE-2025-55182?
How can I reproduce CVE-2025-55182?
References for CVE-2025-55182
Authoritative sources for CVE-2025-55182 — official vulnerability databases and the upstream advisory. Pruva's reproduction verifies the issue firsthand; these are the primary records to corroborate it.