CVE-2026-39363: Vite bloqueia um arquivo via HTTP, mas o serve através do WebSocket HMR
Técnicas e Métodos de Ataque2026-09-11, 08:17
CVE-2026-39363 foi descoberta no Vite — uma ferramenta de build e servidor de desenvolvimento popular para o desenvolvimento web moderno. A vulnerabilidade permite que atacantes remotos leiam arquivos arbitrários acessíveis ao processo do servidor. Ela foi introduzida no Vite 6.0.0 e pode ser explorada quando o servidor de desenvolvimento é exposto à rede, por exemplo, quando iniciado com
vite --host.Para uma requisição HTTP comum, o Vite restringe o acesso a arquivos fora dos diretórios permitidos:
/@fs/etc/passwd?raw → 403 Restricted
No entanto, o mesmo arquivo podia ser obtido através do WebSocket HMR, onde a verificação correspondente estava ausente.
O WebSocket HMR é protegido por um token, mas o Vite o verificava apenas para conexões com cabeçalho Origin. Um cliente não-navegador podia conectar sem cabeçalho Origin e sem token — os desenvolvedores presumiam que tal cliente já tinha acesso à interface HTTP e que o WebSocket não fornecia capacidades adicionais.
Com a introdução da Environment API no Vite 6.0, essa suposição não era mais válida. O WebSocket HMR ganhou o mecanismo RPC vite:invoke e o método fetchModule, permitindo que clientes solicitassem o código-fonte de módulos.
Através de fetchModule, um atacante podia solicitar um arquivo local arbitrário:
file:///etc/passwd?raw
O método fetchModule chamava transformRequest sem aplicar a verificação server.fs.allow que protegia a rota HTTP. O caminho ?raw então lia o arquivo do disco e retornava seu conteúdo via WebSocket.Com acesso de rede ao servidor de desenvolvimento, um atacante poderia potencialmente ler arquivos
.env, chaves SSH, credenciais AWS, tokens npm/GitHub e outros dados locais acessíveis ao processo do servidor. Não era necessário conhecimento prévio do token HMR.A vulnerabilidade foi corrigida no Vite 6.4.2, 7.3.2 e 8.0.5. As verificações de acesso a arquivos foram movidas diretamente para
transformRequest, e fetchModule foi desabilitado para o WebSocket HMR do lado do cliente.Vulnerabilidades
Pesquisadores
Produto