Skip to content

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.

REPRO-2026-00196 react-server-dom-webpack · npm RCE Jul 2, 2026 CVE entry ↗ .txt
Severity
CRITICAL
CVSS
10.0
Confidence
HIGH
Reproduced in
34m 46s
Tool calls
200
Spend
$3.96
01 · Overview

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).

02 · Severity & CVSS

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 threat level
10.0 / 10 CVSS base
Weakness CWE-502: Deserialization of Untrusted Data — Deserialization of Untrusted Data

Critical — the most severe class — typically remotely exploitable with severe impact. Treat as an emergency.

03 · Affected Versions

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
or 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
Run in a VM or disposable container. This exploits a real vulnerability.
06 · Proof of Reproduction

Proof of Reproduction for CVE-2025-55182

Remote code execution — reproduced
  • reached the target end-to-end
  • full exploit chain demonstrated
  • high confidence
  • the upstream fix blocks the same trigger
Trigger

HTTP POST multipart/form-data body with Next-Action header

Attack chain
  1. POST /
  2. decodeReply()
  3. Flight protocol reference resolution
  4. prototype chain
  5. Function constructor
  6. execSync
How the agent worked 458 events · 200 tool calls · 35 min
35 minDuration
200Tool calls
116Reasoning steps
458Events
9Dead-ends
Agent activity over 35 min
Support
14
Hypothesis
2
Repro
121
Judge
36
Variant
281
0:0034:46

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__:then resolves to Chunk.prototype.then (the real then method on Chunk objects, accessed via the prototype chain)
  • $1:constructor:constructor resolves to Function (the JavaScript Function constructor, accessed via Object.constructor.constructor)

Exploit Mechanism

The exploit (based on the public PoC by researcher maple3142) crafts a multipart/form-data body with two form fields:

  1. Field "0": A JSON model object containing:

    • then: "$1:__proto__:then" — sets the chunk's then to Chunk.prototype.then via prototype chain traversal
    • status: "resolved_model" — triggers initializeModelChunk() 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 the Function constructor via prototype chain
  2. Field "1": "$@0" — creates a Chunk reference to field "0"'s value

When decodeReply() processes this FormData:

  1. Field "1" ($@0) creates a Chunk reference to field "0"
  2. The model object from field "0" is parsed
  3. When the chunk is awaited, Chunk.prototype.then runs with the fake model object as this
  4. status: "resolved_model" triggers initializeModelChunk()
  5. initializeModelChunk() accesses _response._formData.get (which is the Function constructor) with _response._prefix (the code string)
  6. 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: x header and crafted multipart/form-data body
  • RCE confirmed: The id command executed on the server, writing uid=1000(vscode) gid=1000(vscode) groups=1000(vscode),962(962) to a marker file
  • Stack trace: Server log shows the code executed via eval at parseModelString in react-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 the Function constructor 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

Artifacts

  • logs/server_vuln.log — vulnerable server log showing decodeReply call
  • logs/server_fixed.log — fixed server log showing normal completion
  • repro/artifacts/request_vuln.txt — raw HTTP exploit request
  • repro/artifacts/response_vuln.txt — HTTP response (timeout, expected)
  • repro/artifacts/request_fixed.txt — same request against fixed version
  • repro/artifacts/response_fixed.txt — HTTP 200 with normal result
  • repro/artifacts/rce_marker_vuln.txtid command output proving RCE
  • repro/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.

Event 1/40
0:001:00
0:00
session startedaccounts/fireworks/routers/glm-5p2-fast · CVE-2025-55182 · REPRO-20
0:03
0:05
web search
0:06
web search
0:08
0:09
0:11
web search
0:20
0:20
extract_facts
no facts extracted
0:21
0:21
0:21
supportrepro
0:36
0:38
0:38
0:38
0:39
0:39
0:39
0:39
0:40
0:40
0:43
0:43
0:44
web search
0:49
0:49
$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 -1
0.3s
v24.15.0
11.12.1
Python 3.14.4
/usr/bin/npx
---
PRETTY_NAME="Ubuntu 26.04 LTS"
NAME="Ubuntu"
VERSION_ID="26.04"
0:49
1:00
08 · How to Fix

How to Fix CVE-2025-55182

Upgrade react-server-dom-webpack · npm to 19.0.1, 19.1.2, 19.2.1 or later.

Coming soon

Step-by-step mitigation and hardening guidance for CVE-2025-55182 — configuration checks, workarounds where no patch exists, and how to verify you're protected — is on the way.

10 · FAQ

FAQ: CVE-2025-55182

How does the CVE-2025-55182 Flight-protocol RCE exploit work?

An attacker crafts a multipart/form-data body whose JSON model field sets then: "$1:__proto__:then" (resolving via the prototype chain to Chunk.prototype.then) and a further reference such as constructor:constructor (resolving to the JavaScript Function constructor via Object.constructor.constructor). When the server decodes this reply, the unguarded property traversal lets the attacker reach Function and execute arbitrary code, based on the public PoC by researcher maple3142.

Which versions of react-server-dom-webpack are affected by CVE-2025-55182, and where is it fixed?

Versions 19.0.0, 19.1.0, 19.1.1, and 19.2.0 are affected. It is fixed in 19.0.1, 19.1.2, and 19.2.1.

How severe is CVE-2025-55182?

Critical, CVSS 10 -- pre-authentication remote code execution reachable via a single crafted HTTP POST to a React Server Function endpoint.

How can I reproduce CVE-2025-55182?

Download the verified script from this page and run it in an isolated environment against a React Server Components app using react-server-dom-webpack 19.0.0, 19.1.0-19.1.1, or 19.2.0. It sends a crafted multipart/form-data request to a Server Function endpoint with prototype-chain references ($1:__proto__:then, constructor:constructor) and shows the server executing attacker-controlled code as a result.
11 · References

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.