问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
[热点]CVE-2025-30208 Vite开发服务器任意文件读取漏洞分析
漏洞分析
Vite 是一款现代化的前端开发构建工具,它提供了快速的开发服务器和高效的构建能力,广泛应用于 Vue.js 项目的开发过程中。Vite 开发服务器在处理特定 URL 请求时,没有对请求的路径进行严格的安全检查和限制,导致攻击者可以绕过保护机制,非法访问项目根目录外的敏感文件
Vite开发服务器任意文件读取漏洞(CVE-2025-30208) ================================= 描述 -- Vite 是一款现代化的前端开发构建工具,它提供了快速的开发服务器和高效的构建能力,广泛应用于 Vue.js 项目的开发过程中。 由于 Vite 开发服务器在处理特定 URL 请求时,没有对请求的路径进行严格的安全检查和限制,导致攻击者可以绕过保护机制,非法访问项目根目录外的敏感文件。攻击者只需在浏览器输入一个 URL,就可能会造成源码、SSH密钥、数据库账号、用户数据等目标机器上的任意文件信息泄露。 目前受影响的NextJS版本: 6.2.0 <= Vite <= 6.2.2 6.1.0 <= Vite <= 6.1.1 6.0.0 <= Vite <= 6.0.11 5.0.0 <= Vite <= 5.4.14 Vite <= 4.5.9 环境搭建 ---- ```php npm create vite@4.4.9 vulnerable-project # 使用受影响版本 cd vulnerable-project && npm install ``` 漏洞复现 ---- 使用payload即可复现 ```php URL+/@fs/etc/passwd?import&raw?? ```  使用fofa语句可搜到11w+条数据 ```php body="/@vite/client" ```  漏洞分析 ---- 参考github报告:<https://github.com/vitejs/vite/security/advisories/GHSA-x574-m823-4x7w> 初步可知`@fs` 拒绝访问 Vite 服务器允许列表之外的文件。在 URL 中添加 `?raw??` 或 `?import&raw??` 可以绕过此限制,如果文件存在则返回文件内容。这种bypass的原因是在多个地方删除了尾随分隔符(如 `?` ),但未在查询字符串的正则表达式中考虑。 查看commit分析修改的代码https://github.com/vitejs/vite/commit/f234b5744d8b74c95535a7b82cc88ed2144263c1#diff-6d94d6934079a4f09596acc9d3f3d38ea426c6f8e98cd766567335d42679ca7cR176 被删除的原始代码片段:  ```javascript if ( (rawRE.test(url) || urlRE.test(url)) && !ensureServingAccess(url, server, res, next) ) { return } ``` #### 1. **正则校验(路由匹配)** - `rawRE.test(url)`:检测请求是否匹配原始文件访问模式(如`/@fs/`路径请求) - `urlRE.test(url)`:检测其他需要特殊处理的URL模式(如模块请求) #### 2. **权限校验(ensureServingAccess)** - 调用`ensureServingAccess(url, ...)`:验证用户是否有权访问该路径 - **校验逻辑**: - 检查请求路径是否在允许的服务范围内(防止目录遍历) - 若路径非法(如访问系统文件),返回`false`并触发403拒绝 - 若路径合法,返回`true`并放行请求 #### 3. **条件阻断** - `if (正则匹配通过 && 权限校验失败)`:立即终止请求处理链(`return`)以此拦截对非法文件的访问,返回403 - - - - - - ### **漏洞触发原理** 原始代码直接使用未经处理的`url`进行校验。攻击者可在 URL 中添加 `?raw??` 或 `?import&raw??` 绕过此限制 **正则匹配绕过** `rawRE`/`urlRE`的正则设计可能无法处理尾部特殊符号。 例如,假设`rawRE`设计为`/^\/@fs\//`,但实际URL为`/@fs/etc/passwd?`,正则匹配仍会通过(`?`被视为查询参数起始符,但未正确剥离)。 ### **对比修复后代码** 修复方案引入路径净化: ```javascript const cleanedUrl = url.replace(/[?&]+$/, '') // 删除尾部?/& if ( (rawRE.test(cleanedUrl) || urlRE.test(cleanedUrl)) && !ensureServingAccess(cleanedUrl, ...) ) { return } ``` ```php const trailingQuerySeparatorsRE = /[?&]+$/ // 新增:匹配URL末尾的连续?或&符号 // 修改后的校验逻辑 const urlWithoutTrailingQuerySeparators = url.replace( trailingQuerySeparatorsRE, // 使用正则表达式 '' // 删除所有尾部查询分隔符 ) if ( (rawRE.test(urlWithoutTrailingQuerySeparators) || // 关键修改:使用净化后的URL urlRE.test(urlWithoutTrailingQuerySeparators)) && !ensureServingAccess( // 权限校验函数 urlWithoutTrailingQuerySeparators, // 传入处理后的URL server, res, next ) ) { return } ``` **防御效果**: 攻击者注入的`?`/`&`被提前清除,校验逻辑基于真实路径(如`/etc/passwd`而非`/etc/passwd?`),彻底阻断绕过可能性。 修复方案 ---- 升级 Vite 版本 - >=6.2.3 - >=6.1.2, <6.2.0 - >=6.0.12, <6.1.0 - >=5.4.15, <6.0.0 - >=4.5.10, <5.0.0 Vite的官方修复在上文已分析 参考 -- <https://github.com/vitejs/vite/commit/f234b5744d8b74c95535a7b82cc88ed2144263c1#diff-6d94d6934079a4f09596acc9d3f3d38ea426c6f8e98cd766567335d42679ca7cR176> <https://nvd.nist.gov/vuln/detail/CVE-2025-30208>
发表于 2025-03-27 14:22:25
阅读 ( 884 )
分类:
开发框架
0 推荐
收藏
0 条评论
请先
登录
后评论
吃不饱的崽
3 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!