ghsa-4r4m-qw57-chr8
Vulnerability from github
Published
2025-03-31 17:31
Modified
2025-03-31 23:32
Severity ?
Summary
Vite has a `server.fs.deny` bypassed for `inline` and `raw` with `?import` query
Details
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
- base64 encoded content of non-allowed files is exposed using
?inline&import
(originally reported as?import&?inline=1.wasm?init
) - content of non-allowed files is exposed using
?raw?import
/@fs/
isn't needed to reproduce the issue for files inside the project root.
PoC
Original report (check details above for simplified cases):
The ?import&?inline=1.wasm?init ending allows attackers to read arbitrary files and returns the file content if it exists. Base64 decoding needs to be performed twice
$ npm create vite@latest
$ cd vite-project/
$ npm install
$ npm run dev
Example full URL http://localhost:5173/@fs/C:/windows/win.ini?import&?inline=1.wasm?init
{ "affected": [ { "package": { "ecosystem": "npm", "name": "vite" }, "ranges": [ { "events": [ { "introduced": "6.2.0" }, { "fixed": "6.2.4" } ], "type": "ECOSYSTEM" } ] }, { "package": { "ecosystem": "npm", "name": "vite" }, "ranges": [ { "events": [ { "introduced": "6.1.0" }, { "fixed": "6.1.3" } ], "type": "ECOSYSTEM" } ] }, { "package": { "ecosystem": "npm", "name": "vite" }, "ranges": [ { "events": [ { "introduced": "6.0.0" }, { "fixed": "6.0.13" } ], "type": "ECOSYSTEM" } ] }, { "package": { "ecosystem": "npm", "name": "vite" }, "ranges": [ { "events": [ { "introduced": "5.0.0" }, { "fixed": "5.4.16" } ], "type": "ECOSYSTEM" } ] }, { "package": { "ecosystem": "npm", "name": "vite" }, "ranges": [ { "events": [ { "introduced": "0" }, { "fixed": "4.5.11" } ], "type": "ECOSYSTEM" } ] } ], "aliases": [ "CVE-2025-31125" ], "database_specific": { "cwe_ids": [ "CWE-200", "CWE-284" ], "github_reviewed": true, "github_reviewed_at": "2025-03-31T17:31:54Z", "nvd_published_at": "2025-03-31T17:15:43Z", "severity": "MODERATE" }, "details": "### Summary\n\nThe contents of arbitrary files can be returned to the browser.\n\n### Impact\nOnly apps 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.\n\n### Details\n\n- base64 encoded content of non-allowed files is exposed using `?inline\u0026import` (originally reported as `?import\u0026?inline=1.wasm?init`)\n- content of non-allowed files is exposed using `?raw?import`\n\n`/@fs/` isn\u0027t needed to reproduce the issue for files inside the project root.\n\n### PoC\n\nOriginal report (check details above for simplified cases):\n\nThe ?import\u0026?inline=1.wasm?init ending allows attackers to read arbitrary files and returns the file content if it exists. Base64 decoding needs to be performed twice\n```\n$ npm create vite@latest\n$ cd vite-project/\n$ npm install\n$ npm run dev\n```\n\nExample full URL `http://localhost:5173/@fs/C:/windows/win.ini?import\u0026?inline=1.wasm?init`", "id": "GHSA-4r4m-qw57-chr8", "modified": "2025-03-31T23:32:54Z", "published": "2025-03-31T17:31:54Z", "references": [ { "type": "WEB", "url": "https://github.com/vitejs/vite/security/advisories/GHSA-4r4m-qw57-chr8" }, { "type": "ADVISORY", "url": "https://nvd.nist.gov/vuln/detail/CVE-2025-31125" }, { "type": "WEB", "url": "https://github.com/vitejs/vite/commit/59673137c45ac2bcfad1170d954347c1a17ab949" }, { "type": "PACKAGE", "url": "https://github.com/vitejs/vite" } ], "schema_version": "1.4.0", "severity": [ { "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:N/A:N", "type": "CVSS_V3" } ], "summary": "Vite has a `server.fs.deny` bypassed for `inline` and `raw` with `?import` query" }
Loading...
Loading...
- Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
- Confirmed: The vulnerability is confirmed from an analyst perspective.
- Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
- Patched: This vulnerability was successfully patched by the user reporting the sighting.
- Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
- Not confirmed: The user expresses doubt about the veracity of the vulnerability.
- Not patched: This vulnerability was not successfully patched by the user reporting the sighting.