All vulnerabilities
CVE-2026-53571GHSA-fx2h-pf6j-xcff

vite: `server.fs.deny` bypass on Windows alternate paths

vitejs vitenpmLibraries & packages
CVSS
6.9Medium
ExploitationPublic exploit codeCISA's assessment says proof of concept code is public, assessed 22 Jun 2026. Not in the KEV catalogCISA via CVE List
Exploit odds (EPSS)0.58%Chance of exploitation activity in the next 30 days, higher than 47% of CVEs. Scored 27 Oct 2026FIRST EPSS
Fixed in8.0.16Also 7.3.5, 6.4.3 and 1 moreGitHub
Published22 Jun 2026Updated 27 Oct 2026CVE List

What fixes it

  • 8.0.16vite, npmGitHubnpm install vite@8.0.16
  • 7.3.5vite, npmGitHubnpm install vite@7.3.5
  • 6.4.3vite, npmGitHubnpm install vite@6.4.3
  • 0.1.24vite-plus, npmGitHubnpm install vite-plus@0.1.24

A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.

Description

Summary

The contents of files that are specified by [server.fs.deny](https://vite.dev/config/server-options#server-fs-deny) can be returned to the browser on Windows.

Impact

Only apps that match the following conditions are affected:

  • explicitly exposes the Vite dev server to the network (using --host or [server.host config option](https://vitejs.dev/config/server-options.html#server-host))
  • the sensitive file exists in the allowed directories specified by [server.fs.allow](https://vite.dev/config/server-options#server-fs-allow)
  • either of:
  • the sensitive file exists in an NTFS volume
  • the dev server is running on Windows and the sensitive file exists in a volume that 8.3 short name generation is enabled (it is enabled by default on system volumes)

Details

Vite’s dev server denies direct access to sensitive files through server.fs.deny, including entries such as .env, .env.*, and *.{crt,pem}. However, on Windows, the deny logic does not correctly normalize NTFS ADS path forms before access checks are applied. Because of this, requests such as /.env::$DATA?raw are treated as allowed paths, while Windows resolves them to the original file's default data stream.

Similar to that, Windows allows accessing a file using a different name with the 8.3 short name compatibility feature. Vite did not reject accessing files via them.

PoC

$ npm create vite@latest
$ cd vite-project/
$ npm install
$ npm run dev

Access via browser at http://localhost:5173/.env::$DATA?raw <img width="388" height="129" alt="deecc1315123883cfd0f9c26a002845a" src="https://github.com/user-attachments/assets/895c6012-4e2e-4a35-babb-69bbf3ee7170" />

Example expected result:

  • /.env::$DATA?raw returns the contents of .env
  • /tls.pem::$DATA?raw returns the contents of tls.pem

Text from GitHub Advisory Database

Affected versions 11

  • vite, npm>= 8.0.0, <= 8.0.15GitHub
  • vite, npm>= 7.0.0, <= 7.3.4GitHub
  • vite, npm<= 6.4.2GitHub
  • vite-plus, npm<= 0.1.23GitHub
  • viteaffected: >= 8.0.0, < 8.0.16CVE List
  • viteaffected: >= 7.0.0, < 7.3.5CVE List
  • viteaffected: < 6.4.3CVE List
  • vite, npmfrom 8.0.0, fixed in 8.0.16OSV
  • vite, npmfrom 7.0.0, fixed in 7.3.5OSV
  • vite, npmfrom first release, fixed in 6.4.3OSV
  • vite-plus, npmfrom first release, fixed in 0.1.24OSV

References 3