简析 vite 最新漏洞 CVE-2025-30208
AI 摘要
Vite框架开发服务器存在CVE-2025-30208漏洞,攻击者可通过特殊查询参数(如?raw??)绕过文件访问控制,任意读取系统文件。漏洞源于transformMiddleware函数对查询字符串尾部字符的验证缺陷。影响范围限于公开暴露的开发服务器(使用--host或server.host非localhost配置)。官方已发布修复版本(6.2.3等),临时方案建议网络隔离、防火墙限制或反向代理过滤。该漏洞类似SQL注入,需尽快升级或实施防护措施。
感觉前脚 nextjs 出现大洞,后脚 vite 也爆出 bug,搞安全的白帽黑帽直呼最近过年了 🤣
前两天还看到尤大对 nextjs 有点幸灾乐祸的感慨,谁知下一刻自己就被偷家了

现在来分析一下漏洞吧
概述
CVE-2025-30208是一个影响Vite框架开发服务器安全的漏洞。该漏洞出现在Vite在处理带有特定查询参数(例如“?raw??”或“?import&raw??”)的文件请求时,由于内部输入验证存在缺陷,导致攻击者可以绕过文件访问控制,从而任意读取敏感文件内容。需要特别注意的是,漏洞仅对将Vite开发服务器向网络公开的应用产生影响,即使用了“--host”或在配置文件中设置了“server.host”为非localhost值的情况。
漏洞根本原因
Vite开发服务器设计目标是利用@fs前缀允许直接从文件系统加载模块,同时通过配置“server.fs.allow”限制可访问的目录。然而,该漏洞产生的根本原因在于处理特殊查询参数时的输入验证缺陷。具体而言:
- 当请求URL中含有例如“?raw??”或“?import&raw??”时,Vite内部的transformMiddleware函数在解析查询字符串时,会错误地忽略尾部多余的分隔符(例如连续的问号“?”)
- 这一处理过程中未能严格校验查询参数的格式,导致原有基于允许列表的访问限制失效,进而使得本应被拒绝的文件被错误地返回。
漏洞利用方式
攻击者能够构造恶意HTTP请求,通过在URL中添加专门格式的查询参数来触发该漏洞。常见的利用示例如下:
- Linux系统:
GET /@fs/etc/passwd?raw??
该请求通过附加“?raw??”参数,使得Vite绕过对/etc/passwd
文件的访问限制,从而返回文件内容。 - Windows系统:
GET /@fs/C:/Windows/win.ini?raw??
同理,构造包含“?raw??”参数的请求即可获取目标文件的内容。
这个漏洞有点像“URL 注入”版的 SQL 注入

代码缺陷和补丁说明
- 代码位置与缺陷描述:
漏洞主要出现在Vite项目的packages/vite/src/node/server/middlewares/transform.ts
文件中。该文件中的transformMiddleware函数负责处理文件请求,并在对查询字符串尾部特殊字符的标准化时存在缺陷,未能严格校验由“?raw??”等恶意参数引入的异常字符,导致访问控制判断不充分。 - 补丁提交:
根据公开安全分析和官方说明,漏洞补丁的提交commit hash为f234b57。该补丁在Vite修复版本6.2.3、6.1.2、6.0.12、5.4.15和4.5.10中均有体现
生产环境防护与临时加强方案
虽然短期内最好的应对方式是升级到官方修复版本,但许多生产环境尚难迅速完成升级,因此以下是一些非版本升级的临时加固方案:
网络隔离与访问限制
- 禁止直接暴露:
建议尽量避免将开发服务器通过“--host”或在配置中将“server.host”设置为公共IP直接暴露到公网,改为绑定在localhost或内部专用网络上。 - 防火墙规则配置:
通过防火墙或网络ACL规则屏蔽开发服务器常用端口(例如默认端口5173)的公网访问,限制只有来自可信网络的流量可以访问。 - 反向代理策略:
部署反向代理,建立白名单机制和应用层验证,对进入开发服务器的请求进行过滤,只允许经过验证的请求转发。
结论
在生产环境中可以采用最小化原则,仅在构建阶段安装调试工具,并使用沙盒化技术来增强对其他工作负载的隔离保护,以快速提高安全性