Vite 任意文件读取漏洞(CVE-2025-30208)
真爱和自由 历史精选 1267浏览 · 2025-04-03 02:19

Vite 任意文件读取漏洞(CVE-2025-30208)

前言

看到群里有人发了一个链接https://github.com/ThumpBo/CVE-2025-30208-EXP

发现这个漏洞危害很大很大,而且利用起来也是非常的容易

而且资产也是比较多的


于是分析分析这个漏洞

漏洞描述

Vite 是一个现代前端构建工具,为 Web 项目提供更快、更精简的开发体验。它主要由两部分组成:具有热模块替换(HMR)功能的开发服务器,以及使用 Rollup 打包代码的构建命令。在 Vite 6.2.3、6.1.2、6.0.12、5.4.15 和 4.5.10 版本之前,用于限制访问 Vite 服务允许列表之外的文件的 server.fs.deny 功能可被绕过。通过在 URL 的@fs 前缀后增加?raw??或?import&raw??,攻击者可以读取文件系统上的任意文件。





影响版本



环境搭建

参考 https://github.com/advisories/GHSA-x574-m823-4x7w

按照要求我们进行如下搭建

可能会遇到虽然指定了版本,但是任然会安装最新的问题



这样即可解决



搭建成功如下

然后写入文件

漏洞复现

首先是正常去访问我们的文件

可以发现访问失败了

但是如果我们使用 payload 去访问

得到了我们的内容

漏洞分析与修复

Vite 使用 server.fs.allow 机制控制允许访问的目录范围

isFileServingAllowed: 判断某个 URL 是否允许被 Vite 服务器访问。

isFileLoadingAllowed: 具体检查某个文件路径是否符合 Vite 的文件访问规则。

ensureServingAccess: 处理 HTTP 请求,如果文件不被允许访问,则返回 403

可以看到逻辑就是只允许 fs.allow 目录下的文件被访问

对应的防护机制是 server.fs.deny

参考 diff 部分

https://github.com/vitejs/vite/commit/f234b5744d8b74c95535a7b82cc88ed2144263c1#diff-6d94d6934079a4f09596acc9d3f3d38ea426c6f8e98cd766567335d42679ca7cR176



在处理浏览器的请求的时候

其对应的正则匹配模式如下 packages\vite\src\node\utils.ts

然后就是检测我们是否有访问权限

而我们的绕过就是在于刚刚的正则匹配部分

通过对敏感路径加入?raw?? 或 ?import&raw??首先成功通过了正则匹配,而我们的这个 url 被输入 ensureServingAccess 的时候,又会被判定为不是系统文件成功绕过两个

我们看看修复部分是如何修复的



在正则匹配之前都会使用 urlWithoutTrailingQuerySeparators 方法去处理

trailingQuerySeparatorsRE 对应如下


而且权限检测现在是检测 urlWithoutTrailingQuerySeparators 处理后的文件了



会输出 Access Denied!

这样成功防止了我们的漏洞 原文件不好调试,把逻辑移动到了自己文件上看效果

0 条评论
某人
表情
可输入 255