Every CVE Search/ Get API key

CVE-2025-32395

Vite has an `server.fs.deny` bypass with an invalid `request-target`

6.0 MediumPublic exploitFix available

Vite is a frontend tooling framework for javascript. Prior to 6.2.6, 6.1.5, 6.0.15, 5.4.18, and 4.5.13, the contents of arbitrary files can be returned to the browser if the dev server is running on Node or Bun. HTTP 1.1 spec (RFC 9112) does not allow # in request-target. Although an attacker can send such a request. For those requests with an invalid request-line (it includes request-target), the spec recommends to reject them with 400 or 301. The same can be said for HTTP 2. On Node and Bun, those requests are not rejected internally and is passed to the user land. For those requests, the value of http.IncomingMessage.url contains #. Vite assumed req.url won't contain # when checking server.fs.deny, allowing those kinds of requests to bypass the check. Only apps explicitly exposing the Vite dev server to the network (using --host or server.host config option) and running the Vite dev server on runtimes that are not Deno (e.g. Node, Bun) are affected. This vulnerability is fixed in 6.2.6, 6.1.5, 6.0.15, 5.4.18, and 4.5.13.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
Passive

What an attacker can affect

Confidentiality
High
Integrity
None
Availability
None

Exploit likelihood

1.81%Up 1.8 points since Apr 11, 2025
90%50%10%1%

What each source reports

CVE List Score used 6.0

Vite has an `server.fs.deny` bypass with an invalid `request-target`

Vite is a frontend tooling framework for javascript. Prior to 6.2.6, 6.1.5, 6.0.15, 5.4.18, and 4.5.13, the contents of arbitrary files can be returned to the browser if the dev server is running on Node or Bun. HTTP 1.1 spec (RFC 9112) does not allow # in request-target. Although an attacker can send such a request. For those requests with an invalid request-line (it includes request-target), the spec recommends to reject them with 400 or 301. The same can be said for HTTP 2. On Node and Bun, those requests are not rejected internally and is passed to the user land. For those requests, the value of http.IncomingMessage.url contains #. Vite assumed req.url won't contain # when checking server.fs.deny, allowing those kinds of requests to bypass the check. Only apps explicitly exposing the Vite dev server to the network (using --host or server.host config option) and running the Vite dev server on runtimes that are not Deno (e.g. Node, Bun) are affected. This vulnerability is fixed in 6.2.6, 6.1.5, 6.0.15, 5.4.18, and 4.5.13.

Record
CVE-2025-32395
CVSS 4.0
6.0 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Weakness
CWE-200
Updated
2026-11-02
EUVDEUVD-2025-10686 6.0

Vite is a frontend tooling framework for javascript. Prior to 6.2.6, 6.1.5, 6.0.15, 5.4.18, and 4.5.13, the contents of arbitrary files can be returned to the browser if the dev server is running on Node or Bun. HTTP 1.1 spec (RFC 9112) does not allow # in request-target. Although an attacker can send such a request. For those requests with an invalid request-line (it includes request-target), the spec recommends to reject them with 400 or 301. The same can be said for HTTP 2. On Node and Bun, those requests are not rejected internally and is passed to the user land. For those requests, the value of http.IncomingMessage.url contains #. Vite assumed req.url won't contain # when checking server.fs.deny, allowing those kinds of requests to bypass the check. Only apps explicitly exposing the Vite dev server to the network (using --host or server.host config option) and running the Vite dev server on runtimes that are not Deno (e.g. Node, Bun) are affected. This vulnerability is fixed in 6.2.6, 6.1.5, 6.0.15, 5.4.18, and 4.5.13.

Record
EUVD-2025-10686
CVSS 4.0
6.0 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-356w-63v5-8wf4 6.0

Vite has an `server.fs.deny` bypass with an invalid `request-target`

Summary

The contents of arbitrary files can be returned to the browser if the dev server is running on Node or Bun.

Impact

Only apps with the following conditions are affected.

  • explicitly exposing the Vite dev server to the network (using --host or server.host config option)
  • running the Vite dev server on runtimes that are not Deno (e.g. Node, Bun)

Details

HTTP 1.1 spec (RFC 9112) does not allow # in request-target. Although an attacker can send such a request. For those requests with an invalid request-line (it includes request-target), the spec recommends to reject them with 400 or 301. The same can be said for HTTP 2 (ref1, ref2, ref3).

On Node and Bun, those requests are not rejected internally and is passed to the user land. For those requests, the value of http.IncomingMessage.url contains #. Vite assumed req.url won't contain # when checking server.fs.deny, allowing those kinds of requests to bypass the check.

On Deno, those requests are not rejected internally and is passed to the user land as well. But for those requests, the value of http.IncomingMessage.url did not contain #.

PoC

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

send request to read /etc/passwd

curl --request-target /@fs/Users/doggy/Desktop/vite-project/#/../../../../../etc/passwd http://127.0.0.1:5173
Record
GHSA-356w-63v5-8wf4
CVSS 4.0
6.0 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Weakness
CWE-200
Updated
2026-11-02
NVD 6.0

Vite is a frontend tooling framework for javascript. Prior to 6.2.6, 6.1.5, 6.0.15, 5.4.18, and 4.5.13, the contents of arbitrary files can be returned to the browser if the dev server is running on Node or Bun. HTTP 1.1 spec (RFC 9112) does not allow # in request-target. Although an attacker can send such a request. For those requests with an invalid request-line (it includes request-target), the spec recommends to reject them with 400 or 301. The same can be said for HTTP 2. On Node and Bun, those requests are not rejected internally and is passed to the user land. For those requests, the value of http.IncomingMessage.url contains #. Vite assumed req.url won't contain # when checking server.fs.deny, allowing those kinds of requests to bypass the check. Only apps explicitly exposing the Vite dev server to the network (using --host or server.host config option) and running the Vite dev server on runtimes that are not Deno (e.g. Node, Bun) are affected. This vulnerability is fixed in 6.2.6, 6.1.5, 6.0.15, 5.4.18, and 4.5.13.

Record
CVE-2025-32395
CVSS 4.0
6.0 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Weakness
CWE-200
Updated
2026-11-02
OSV 6.0

Vite has an `server.fs.deny` bypass with an invalid `request-target`

Vite is a frontend tooling framework for javascript. Prior to 6.2.6, 6.1.5, 6.0.15, 5.4.18, and 4.5.13, the contents of arbitrary files can be returned to the browser if the dev server is running on Node or Bun. HTTP 1.1 spec (RFC 9112) does not allow # in request-target. Although an attacker can send such a request. For those requests with an invalid request-line (it includes request-target), the spec recommends to reject them with 400 or 301. The same can be said for HTTP 2. On Node and Bun, those requests are not rejected internally and is passed to the user land. For those requests, the value of http.IncomingMessage.url contains #. Vite assumed req.url won't contain # when checking server.fs.deny, allowing those kinds of requests to bypass the check. Only apps explicitly exposing the Vite dev server to the network (using --host or server.host config option) and running the Vite dev server on runtimes that are not Deno (e.g. Node, Bun) are affected. This vulnerability is fixed in 6.2.6, 6.1.5, 6.0.15, 5.4.18, and 4.5.13.

Record
CVE-2025-32395
CVSS 4.0
6.0 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Weakness
CWE-200
Updated
2026-11-04
OSVGHSA-356w-63v5-8wf4 6.0

Vite has an `server.fs.deny` bypass with an invalid `request-target`

Summary

The contents of arbitrary files can be returned to the browser if the dev server is running on Node or Bun.

Impact

Only apps with the following conditions are affected.

  • explicitly exposing the Vite dev server to the network (using --host or server.host config option)
  • running the Vite dev server on runtimes that are not Deno (e.g. Node, Bun)

Details

HTTP 1.1 spec (RFC 9112) does not allow # in request-target. Although an attacker can send such a request. For those requests with an invalid request-line (it includes request-target), the spec recommends to reject them with 400 or 301. The same can be said for HTTP 2 (ref1, ref2, ref3).

On Node and Bun, those requests are not rejected internally and is passed to the user land. For those requests, the value of http.IncomingMessage.url contains #. Vite assumed req.url won't contain # when checking server.fs.deny, allowing those kinds of requests to bypass the check.

On Deno, those requests are not rejected internally and is passed to the user land as well. But for those requests, the value of http.IncomingMessage.url did not contain #.

PoC

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

send request to read /etc/passwd

curl --request-target /@fs/Users/doggy/Desktop/vite-project/#/../../../../../etc/passwd http://127.0.0.1:5173
Record
GHSA-356w-63v5-8wf4
CVSS 4.0
6.0 MediumCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Weakness
CWE-200
Updated
2026-11-02
Show 8 moreShow less
OSVCLSA-2026-1775089661 No score

TuxCare security update for 2 packages (5 CVEs)

TuxCare rebuilt 2 packages to address 5 CVEs. Fixed in 5.4.14-tuxcare.1.

Record
CLSA-2026-1775089661
Updated
2026-11-02
OSVCLSA-2026-1775176118 No score

TuxCare security update for vite (6 CVEs)

TuxCare rebuilt vite to address 6 CVEs. Fixed in 4.5.5-tuxcare.1.

Record
CLSA-2026-1775176118
Updated
2026-11-02
OSVCLSA-2026-1777509608 No score

TuxCare security update for vite (11 CVEs)

TuxCare rebuilt vite to address 11 CVEs. Fixed in 2.9.18-tuxcare.1.

Record
CLSA-2026-1777509608
Updated
2026-11-02
OSVCLSA-2026-1777509610 No score

TuxCare security update for vite (6 CVEs)

TuxCare rebuilt vite to address 6 CVEs. Fixed in 3.2.11-tuxcare.1.

Record
CLSA-2026-1777509610
Updated
2026-11-02
OSVCLSA-2026-1789031855 No score

TuxCare security update for vite (16 CVEs)

TuxCare rebuilt vite to address 16 CVEs. Fixed in 4.1.5-tuxcare.1.

Record
CLSA-2026-1789031855
Updated
2026-11-02
OSVCLSA-2026-1791897792 No score

TuxCare security update for vite (8 CVEs)

TuxCare rebuilt vite to address 8 CVEs. Fixed in 5.4.10-tuxcare.4.

Record
CLSA-2026-1791897792
Updated
2026-11-02
OSVCLSA-2026-1792225950 No score

TuxCare security update for @vitejs/plugin-react (11 CVEs)

TuxCare rebuilt @vitejs/plugin-react to address 11 CVEs. Fixed in 2.9.18-tuxcare.1.

Record
CLSA-2026-1792225950
Updated
2026-11-02
OSVCLSA-2026-1792225952 No score

TuxCare security update for @vitejs/plugin-react (6 CVEs)

TuxCare rebuilt @vitejs/plugin-react to address 6 CVEs. Fixed in 3.2.11-tuxcare.1.

Record
CLSA-2026-1792225952
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
vite
npm
6.2.0 up to 6.2.6
6.2.6
vite
npm
6.1.0 up to 6.1.5
6.1.5
vite
npm
6.0.0 up to 6.0.15
6.0.15
vite
npm
5.0.0 up to 5.4.18
5.4.18
vite
npm
before 4.5.13
4.5.13
@vitejs/plugin-legacy
TuxCare:npm
From an advisory covering 4 CVEs
5.4.14-tuxcare.0 up to 5.4.14-tuxcare.1, plus listed versions
5.4.14
5.4.14-tuxcare.1
vite
TuxCare:npm
From an advisory covering 4 CVEs
5.4.14-tuxcare.0 up to 5.4.14-tuxcare.1, plus listed versions
5.4.14
5.4.14-tuxcare.1
vite
TuxCare:npm
From an advisory covering 6 CVEs
4.5.5-tuxcare.0 up to 4.5.5-tuxcare.1, plus listed versions
4.5.5
4.5.5-tuxcare.1
vite
TuxCare:npm
From an advisory covering 11 CVEs
2.9.18-tuxcare.0 up to 2.9.18-tuxcare.1, plus listed versions
2.9.18
2.9.18-tuxcare.1
vite
TuxCare:npm
From an advisory covering 6 CVEs
3.2.11-tuxcare.0 up to 3.2.11-tuxcare.1, plus listed versions
3.2.11
3.2.11-tuxcare.1
Show 4 moreShow less
Affected packages
PackageAffectedFixed
vite
TuxCare:npm
From an advisory covering 16 CVEs
4.1.5-tuxcare.0 up to 4.1.5-tuxcare.1, plus listed versions
4.1.5
4.1.5-tuxcare.1
vite
TuxCare:npm
From an advisory covering 8 CVEs
5.4.10-tuxcare.0 up to 5.4.10-tuxcare.4, plus listed versions
5.4.105.4.10-tuxcare.15.4.10-tuxcare.25.4.10-tuxcare.3
5.4.10-tuxcare.4
@vitejs/plugin-react
TuxCare:npm
From an advisory covering 11 CVEs
2.9.18-tuxcare.0 up to 2.9.18-tuxcare.1, plus listed versions
2.9.18
2.9.18-tuxcare.1
@vitejs/plugin-react
TuxCare:npm
From an advisory covering 6 CVEs
3.2.11-tuxcare.0 up to 3.2.11-tuxcare.1, plus listed versions
3.2.11
3.2.11-tuxcare.1

Public exploits

Links only. Every CVE stores no exploit code.

Public exploits
SourceLinkDate
PoC in GitHubruiwenya/CVE-2025-323952025-04-18
NucleiVite - Path Traversal

History

History
RecordedChangedSources
affected
exploits, factsOSV
first indexedCVE List, EUVD, GitHub Advisories, Nuclei, NVD, OSV, PoC in GitHub

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2025-32395 is a medium vulnerability (CVSS 6.0) in Vitejs Vite, published April 10, 2025. Public exploit code exists. EPSS puts the chance of exploitation in the next 30 days at 1.81%, the 78th percentile. Fixed in vite 6.2.6.

References

MoveEnter Open