Vitest browser mode serves arbitrary files
Published 4 Feb 2025 · Updated 4 Feb 2025
Affected packages
- Affected
- >=2.0.4 <2.1.9
- Fixed in
- 2.1.9
npm install @vitest/browser@2.1.9- Affected
- >=3.0.0 <3.0.4
- Fixed in
- 3.0.4
npm install @vitest/browser@3.0.4Details
Summary
__screenshot-error handler on the browser mode HTTP server that responds any file on the file system. Especially if the server is exposed on the network by `browser.api.host: true`, an attacker can send a request to that handler from remote to get the content of arbitrary files.
Details
This __screenshot-error handler on the browser mode HTTP server responds any file on the file system.
https://github.com/vitest-dev/vitest/blob/f17918a79969d27a415f70431e08a9445b051e45/packages/browser/src/node/plugin.ts#L88-L130
This code was added by https://github.com/vitest-dev/vitest/commit/2d62051f13b4b0939b2f7e94e88006d830dc4d1f.
PoC
1. Create a directory and change the current directory to that directory
1. Run npx vitest init browser
1. Run npm run test:browser
2. Run curl http://localhost:63315/__screenshot-error?file=/path/to/any/file
Impact
Users explicitly exposing the browser mode server to the network by `browser.api.host: true` may get any files exposed.
Is GHSA-8gvc-j273-4wm5 in any of your client repos?
Checking one package by hand is fine. Checking it across forty client projects is not. NPMscan reads the lockfiles in every GitHub repo you pick, finds each project with an affected @vitest/browser, and gives you the command that fixes it.
References
- Linkgithub.com/vitest-dev/vitest/security/advisories/GHSA-8gvc-j273-4wm5
- Advisorynvd.nist.gov/vuln/detail/CVE-2025-24963
- Linkgithub.com/vitest-dev/vitest/commit/2d62051f13b4b0939b2f7e94e88006d830dc4d1f
- Linkgithub.com/vitest-dev/vitest/commit/ed9aeba212df04b83ed01810780663ff2cdd0adf
- Packagegithub.com/vitest-dev/vitest
- Linkgithub.com/vitest-dev/vitest/blob/f17918a79969d27a415f70431e08a9445b051e45/packages/browser/src/node/plugin.ts#L88-L130
- Linkvitest.dev/guide/browser/config.html#browser-api
Advisory data from OSV.dev (opens OSV.dev in a new tab), refreshed daily.