Vite CVE-2025-30208 安全漏洞
一、漏洞概述
CVE-2025-30208 是 Vite(一个前端开发工具提供商)在特定版本中存在的安全漏洞。此漏洞允许攻击者通过特殊的 URL 参数绕过对文件系统的访问限制,从而获取任意文件内容(包括非 Vite 服务目录范围外的文件)。
1. 漏洞原理
- Vite 在开发服务器模式下提供了 @fs 用于访问服务允许范围内的文件。
- 本应对超出范围的文件请求返回 403 Restricted;然而,在请求 URL 中添加 ?raw?? 或 ?import&raw?? 时,可以绕过原有检查。
- 这是由于在多个处理环节中会移除类似 ? 的结尾分隔符,但并未在查询字符串的正则匹配中考虑这一点;攻击者可利用这一缺陷读取目标文件内容。
2. 漏洞影响
- 在特定配置下,攻击者能够访问服务器上任意位置的文件(如 /tmp/secret.txt),并将内容返回给浏览器。
- 仅在 显式暴露 Vite 开发服务器(如使用 --host 或在 server.host 中配置对外可访问)时,外部才可直接发起请求进行文件读取。
- 如果文件中包含敏感数据(如凭据、配置等),则可能造成信息泄露。
二、受影响范围
1. 影响版本
根据官方与社区信息,以下 Vite 版本均存在该漏洞:
-
= 6.2.0, <= 6.2.2
-
= 6.1.0, <= 6.1.1
-
= 6.0.0, <= 6.0.11
-
= 5.0.0, <= 5.4.14
- <= 4.5.9
更概括地说:6.2.3、6.1.2、6.0.12、5.4.15、4.5.10 之前的版本。
2. 修复版本
- 6.2.3 及以上
- 6.1.2
- 6.0.12
- 5.4.15
- 4.5.10
仅上述版本及更高版本中已修复此漏洞。
3. 受影响部署方式
- 在生产或外部环境运行 Vite Dev Server,并且使用 --host 或在 vite.config.js 中的 server.host 开启对外网可访问。
4. 不受影响场景
- 在本地开发环境使用 Vite,不对外暴露端口;仅自己访问 localhost。
- 已经将代码打包后交由 Nginx/Tomcat/Egg 等服务器代理,生产环境并无开启 Vite Dev Server。
- 使用修复后的 Vite 版本。
三、漏洞成因
- 核心问题:当请求 URL 带有 ?raw?? / ?import&raw?? 等结尾分隔符时,Vite 中移除 ? 等尾部分隔符的逻辑与查询字符串正则不匹配的处理不一致,导致访问超出允许列表的文件时的"403"限制被绕过。
四、漏洞利用示例
以官方 PoC 为例:
- 正常情况下,访问 http://localhost:5173/@fs/tmp/secret.txt 会返回:
html
403 Restricted
The request url "/tmp/secret.txt" is outside of Vite serving allow list.
- 但在请求后面加上 ?import&raw??:
html
curl "http://localhost:5173/@fs/tmp/secret.txt?import&raw??"
返回结果将是该文件的内容,例如:
html
export default "top secret content\n"
//# sourceMappingURL=data:application/json;...
五、修复与缓解
1. 升级到安全版本
- 立即升级到 Vite 6.2.3 / 6.1.2 / 6.0.12 / 5.4.15 / 4.5.10 或更高版本,以获取官方修补。
2. 临时措施
若暂时无法升级,可采取以下措施:
- 不要在生产环境开放 Vite Dev Server 对外访问;仅在内网或本地使用。
- 限制访问范围:在防火墙或 Nginx 层做 IP 限制,确保仅可信的 IP 可以访问。
- 对路由请求进行严格检查:在代理层对包含 ?raw?? / ?import&raw?? 字样的请求进行拦截,阻断对 Vite Dev Server 的直连访问。
六、时间线(示例)
- 2025-03-24:CVE-2025-30208 在 NVD 上公开
- 2025-03-25:社区与官方确认影响版本及修补方式
- 2025-03-26:Vite 发布多条 Commit 修复与对应 Advisory
- 2025-03-27:修复版本(6.2.3、6.1.2 等)正式上线并通告用户升级
七、总结
CVE-2025-30208 展示了在前端开发服务器中安全控制的重要性------即便只是用于开发调试,也可能因意外暴露而导致信息泄露风险。
针对该漏洞,最安全的做法 是在生产环境避免直接使用 Vite Dev Server ,同时升级到官方修复版本。对于内网或测试场景,应确保只在可信网络中启用对外访问,或为 Vite Dev Server 配置更严格的访问限制。
- 若仅在本地/开发环境使用 Vite:线上对外并没有 "Vite Dev Server",那么不会受到这个漏洞影响。
- 若在生产环境也对外暴露 Vite Dev Server:才有必要升级到 Vite 的修复版本,或者至少确保不对外开放该调试服务。