Vite Server Options (server.fs.deny) can be bypassed using double forward-slash (//) (GHSA-353f-5xf4-qw67)
Aliases: CVE-2023-34092
Published: 2023-06-06T02:01:39Z
Severity: type: CVSS_V3
score: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Affected: [{'package': {'ecosystem': 'npm', 'name': 'vite'}, 'ecosystem_specific': {'affected_functions': ['']}, 'ranges': [{'type': 'ECOSYSTEM', 'events': [{'introduced': '0'}, {'fixed': '2.9.16'}]}]}, {'package': {'ecosystem': 'npm', 'name': 'vite'}, 'ecosystem_specific': {'affected_functions': ['']}, 'ranges': [{'type': 'ECOSYSTEM', 'events': [{'introduced': '3.0.2'}, {'fixed': '3.2.7'}]}]}, {'package': {'ecosystem': 'npm', 'name': 'vite'}, 'ecosystem_specific': {'affected_functions': ['']}, 'ranges': [{'type': 'ECOSYSTEM', 'events': [{'introduced': '4.0.0'}, {'fixed': '4.0.5'}]}]}, {'package': {'ecosystem': 'npm', 'name': 'vite'}, 'ecosystem_specific': {'affected_functions': ['']}, 'ranges': [{'type': 'ECOSYSTEM', 'events': [{'introduced': '4.1.0'}, {'fixed': '4.1.5'}]}]}, {'package': {'ecosystem': 'npm', 'name': 'vite'}, 'ecosystem_specific': {'affected_functions': ['']}, 'ranges': [{'type': 'ECOSYSTEM', 'events': [{'introduced': '4.2.0'}, {'fixed': '4.2.3'}]}]}, {'package': {'ecosystem': 'npm', 'name': 'vite'}, 'ecosystem_specific': {'affected_functions': ['']}, 'ranges': [{'type': 'ECOSYSTEM', 'events': [{'introduced': '4.3.0'}, {'fixed': '4.3.9'}]}]}]

### Summary
The issue involves a security vulnerability in Vite, where the server options can be bypassed using a double forward slash (`//`). This vulnerability poses a potential security risk as it can allow unauthorized access to sensitive directories and files. This document outlines the steps to address and mitigate this issue. Adding Extra References : ## Steps to Fix. **Update Vite**:Ensure that you are using the latest version of Vite. Security issues like this are often fixed in newer releases.\n\n2. **Secure the Server Configuration**:In your `vite.config.js` file, review and update the server configuration options to restrict access to unauthorized requests or directories. For example:```javascript\n // vite.config.js\n export default { server: {\n fs: {\n deny: ['private-directory'] // Restrict access to specific directories

### Impact
Only users explicitly exposing the Vite dev server to the network (using `--host` or [`server.host` config option](https://vitejs.dev/config/server-options.html#server-host)) are affected, and only files in the immediate Vite project root folder could be exposed.

### Patches
Fixed in vite@4.3.9, vite@4.2.3, vite@4.1.5, vite@4.0.5
And in the latest minors of the previous two majors: vite@3.2.7, vite@2.9.16

### Details
Vite serve the application with under the root-path of the project while running on the dev mode. By default, vite using server options fs.deny to protected the sensitive information of the file. But, with simply double forward-slash, we can bypass this fs restriction. 

### PoC
1. Create a new latest project of vite using any package manager. (here I'm using react and vue templates for tested and pnpm)
2. Serve the application on dev mode using pnpm run dev.
3. Directly access the file from url using double forward-slash (`//`) (e.g: `//.env`, `//.env.local`)
4. Server Options `fs.deny` restrict successfully bypassed.

Proof Images:
![proof-1](https://user-images.githubusercontent.com/30733517/241105344-6ecbc7f6-57b7-45c7-856a-6421a577dda1.png)
![proof-2](https://user-images.githubusercontent.com/30733517/241105349-ab9561e7-8aff-4f29-97f9-b784e673c122.png)