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

关键函数

  1. fileToUrlfileToDevUrl:负责将文件路径转换为URL并读取文件内容
  2. cleanUrl:清洗URL,移除查询参数和片段标识符
  3. removeImportQuery:移除import查询参数

漏洞触发流程

  1. 攻击者发送特制请求(如POC所示)
  2. 请求经过removeTimestampQuery处理(无影响)
  3. 检查inlineRErawRE等正则表达式(在6.2.3及以下版本可绕过)
  4. 进入transformRequest -> doTransform -> loadAndTransform -> load
  5. 最终调用fileToUrlfileToDevUrl读取文件

版本修复情况

  1. 6.2.2版本修复

    • 修补了CVE-2025-30208
    • 主要移除了URL末尾多余的?&
    • 未完全修复CVE-2025-31125
  2. 6.2.3版本修复

    • 改进了inlineRE正则表达式
    • 修复了公开POC,但未公开的POC仍可使用
  3. 6.2.4版本修复

    • 删除了!id.endsWith('.wasm?init')检查
    • 替换为!wasmInitRE.test(id)
    • 修复了公开POC,但存在未公开的SVG相关POC
  4. 6.2.5版本修复

    • 添加了对SVG文件的检查
    • 完全修复了所有已知POC

未公开POC分析

/@fs/etc/passwd?import&?meteorkai.svg?.wasm?init

利用SVG扩展名绕过检查:

  1. 在6.2.4版本中,svgExtRE.test(id)为true
  2. 绕过inlineRE检查
  3. 最终仍能触发文件读取

防御措施

  1. 升级到Vite 6.2.5或更高版本
  2. 检查并限制开发服务器的访问权限
  3. 在生产环境中禁用开发服务器功能

总结

该漏洞展示了路径处理和URL解析中的安全问题,强调了:

  1. 输入验证的重要性
  2. 正则表达式设计的严谨性
  3. 安全补丁的全面性(需要覆盖所有可能的攻击向量)
  4. 防御深度的重要性(多层检查机制)
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解析中的安全问题,强调了: 输入验证的重要性 正则表达式设计的严谨性 安全补丁的全面性(需要覆盖所有可能的攻击向量) 防御深度的重要性(多层检查机制)