Vite开发服务器任意文件读取漏洞分析复现(CVE-2025-31125)
字数 1284 2025-08-30 06:50:36
Vite开发服务器任意文件读取漏洞分析(CVE-2025-31125)教学文档
漏洞概述
本漏洞是CVE-2025-30208的升级版,影响Vite开发服务器的多个版本,允许攻击者通过特制请求读取服务器上的任意文件。
受影响版本
- 6.2.0 <= Vite <= 6.2.3
- 6.1.0 <= Vite <= 6.1.2
- 6.0.0 <= Vite <= 6.0.12
- 5.0.0 <= Vite <= 5.4.15
- Vite <= 4.5.10
漏洞分析
公开POC
/@fs/etc/passwd?import&?inline=1.wasm?init
漏洞原理
漏洞存在于Vite的transform中间件中,攻击者可以通过精心构造的URL绕过安全检查,导致服务器读取并返回任意文件内容。
代码分析
关键文件
packages/vite/src/node/server/middlewares/transform.ts
关键函数
fileToUrl和fileToDevUrl:负责将文件路径转换为URL并读取文件内容cleanUrl:清洗URL,移除查询参数和片段标识符removeImportQuery:移除import查询参数
漏洞触发流程
- 攻击者发送特制请求(如POC所示)
- 请求经过
removeTimestampQuery处理(无影响) - 检查
inlineRE、rawRE等正则表达式(在6.2.3及以下版本可绕过) - 进入
transformRequest->doTransform->loadAndTransform->load - 最终调用
fileToUrl和fileToDevUrl读取文件
版本修复情况
-
6.2.2版本修复:
- 修补了CVE-2025-30208
- 主要移除了URL末尾多余的
?和& - 未完全修复CVE-2025-31125
-
6.2.3版本修复:
- 改进了
inlineRE正则表达式 - 修复了公开POC,但未公开的POC仍可使用
- 改进了
-
6.2.4版本修复:
- 删除了
!id.endsWith('.wasm?init')检查 - 替换为
!wasmInitRE.test(id) - 修复了公开POC,但存在未公开的SVG相关POC
- 删除了
-
6.2.5版本修复:
- 添加了对SVG文件的检查
- 完全修复了所有已知POC
未公开POC分析
/@fs/etc/passwd?import&?meteorkai.svg?.wasm?init
利用SVG扩展名绕过检查:
- 在6.2.4版本中,
svgExtRE.test(id)为true - 绕过
inlineRE检查 - 最终仍能触发文件读取
防御措施
- 升级到Vite 6.2.5或更高版本
- 检查并限制开发服务器的访问权限
- 在生产环境中禁用开发服务器功能
总结
该漏洞展示了路径处理和URL解析中的安全问题,强调了:
- 输入验证的重要性
- 正则表达式设计的严谨性
- 安全补丁的全面性(需要覆盖所有可能的攻击向量)
- 防御深度的重要性(多层检查机制)