Repository navigation
deps(v4): update dependency vitest to v5 [security] (v4) - #400
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
force-pushed
the
renovate/v4-npm-vitest-vulnerability
branch
from
October 27, 2026 08:20
f2b7993 to
833ecc9
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
^1.6.0→^5.0.0When Vitest UI server is listening, arbitrary file can be read and executed
CVE-2026-47429 / GHSA-5xrq-8626-4rwp
More information
Details
Summary
Arbitrary file can be read on Windows when Vitest UI server is listening, especially when exposed to the network.
Impact
Only users that match either of the following conditions are affected:
--api.hostorapi.hostconfig option)Details
The API handler for
/__vitest_attachment__uses the deprecatedisFileServingAllowedincorrectly.https://github.com/vitest-dev/vitest/blob/eb1abf08573032a532015b999ad3501c5e89e3bb/packages/ui/node/index.ts#L77
The function expects the passed value to use
cleanUrlafter the check before file system related operation.Because of this, it is possible to bypass the check by
\\?\\..\\. This is not possible on Linux as Linux errors if a directory named?does not exist.A similar problem exists in other places as well.
That said, this
isFileServingAllowedcheck does not actually prevent the API to be abused. Since the API has rerun feature and file write feature, it's possible to run arbitrary script by writing a script as a test file usingsaveTestFileand running it usingrerun. This means exposing the API / Vitest UI is equivalent to giving script execution access.On the browser mode side, there're
readFile/writeFile/saveSnapshotFile. So exposing the browser mode is equivalent to giving file read / write access.PoC
curl http://localhost:51204/__vitest__/curl "http://localhost:51204/__vitest_attachment__?path=C:\\path\\to\\project\\?\\..\\..\\secret.txt&contentType=text/plain&token=$TOKEN"(TOKEN is the API token)secret.txtthat is outside the project directoryMitigations
Vitest now ships two configuration flags,
allowWriteandallowExec, that gate the privileged operations exploited by this vulnerability. Both are disabled by default whenever the API server is bound to a non-localhosthost, ensuring that exposing the server to the network no longer implicitly grants write or execute capabilities to remote clients.When these flags are disabled, the UI also enters a read-only mode: in-browser code editing and test file execution are turned off, removing the attack surface that allowed remote code execution. Many Browser Mode features are also disabled, like attachments, artifacts or snapshots. See
browser.api.Users who require the full interactive UI on a networked host must explicitly opt in by setting
allowWriteand/orallowExectotrue.Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Release Notes
vitest-dev/vitest (vitest)
v5.0.5Compare Source
🐞 Bug Fixes
fs.denywith api token file - by @hi-ogawa, Hiroshi Ogawa and Claude Opus 5.5 in #11578 (28dc1)--changed- by @sheremet-va in #11583 (14921)datato theimport.meta.hotstub - by @sheremet-va in #11590 (3a828)skipinskipIf, ignoreundefinedoptions - by @sheremet-va in #11591 (d523a)&#​39;failed&#​39;on worker crash - by @AriPerkkio in #11568 (6ae8e)View changes on GitHub
v5.0.4Compare Source
🚀 Features
test.ui.themeoption - by @sheremet-va in #11499 (1da66)--changed- by @sheremet-va in #11424 (a2336)🐞 Bug Fixes
:in project and change the shape ofresultscache - by @sheremet-va in #11453 (9673c)$string values whentaskTitleValueFormatTruncateis 0 - by @hi-ogawa, Hiroshi Ogawa and Claude Opus 5.5 in #11485 (4f7e1)maxWorkerssetting. Previously, it was applied incorrectly and could lead to Vitest using too many resources. For example, a lower number would still open too many browsers. Fixing it means Vitest opens less instances by default now.allowExternalfails to include uncovered files - by @AriPerkkio in #11513 (4ef00)MapandSetdeep equality in some assertions - by @hi-ogawa, Hiroshi Ogawa and Claude Opus 5.5 in #11402 (b4e79)thistomodule.exports- by @sheremet-va in #11504 (b618a)🏎 Performance
View changes on GitHub
v5.0.3Compare Source
🐞 Bug Fixes
result.statusbetweenrepeatsruns - by @hi-ogawa, Hiroshi Ogawa and Codex (GPT-6) in #11218 (5dbeb)test.failsexpectedly failed - by @hi-ogawa, Hiroshi Ogawa and Codex (GPT-6) in #11219 (b2458)listenuntil tests start running - by @sheremet-va in #11366 (7d8ed)toMatchScreenshotuses wrong reference on retried tests - by @macarie in #11393 (c22ab)why-is-node-runningto3.2.1to avoid users running intoERR_PNPM_TRUST_DOWNGRADE- by @AriPerkkio in #11403 (f6c9a)expect.extendasymmetric matchers - by @hi-ogawa, Hiroshi Ogawa and Claude in #11401 (3e794)groupOrderis set - by @mtorp in #11392 (50312)View changes on GitHub
v5.0.2Compare Source
🐞 Bug Fixes
processin case global is overwritten - by @AriPerkkio in #11343 (0b792)process.stdiohandles - by @AriPerkkio in #11333 (0fd6b)toMatchObjectwith asymmetric matchers - by @ShreeBohara, Claude Opus 5, @hi-ogawa, Hiroshi Ogawa and Codex (GPT-5) in #11100 (42523)RequestwithBlobbody on jsdom 28+ - by @harshit-d3v in #11295 (d1c3e)agentto respect--silent- by @Raj4478 and @AriPerkkio in #11271 (5b95e)createReportcalls - by @7rulnik in #11278 (e8e55)hanging-processto use ESM entrypoint - by @AriPerkkio in #11316 (4e91e)Set.prototype.add- by @fengmk2 in #11299 (a0a93)View changes on GitHub
v5.0.1Compare Source
🚀 Features
🐞 Bug Fixes
extends- by @sheremet-va in #11034 (23dda)deps.optimizer.webis used - by @im10furry in #11214 (2ce29)config.define- by @sheremet-va in #11198 (972e2)toMatchAriaSnapshot- by @sheremet-va in #11208 (c119b)queueMicrotaskandnextTickintoNotFake- by @kingmakeruix, kingmakeruix, Hiroshi Ogawa, Codex and @hi-ogawa in #11261 (a47d7)deepMergeto handle prototype - by @hi-ogawa, Hiroshi Ogawa and Codex in #11215 (4944c)View changes on GitHub
v5.0.0Compare Source
Vitest 5 is officially out! This release focuses on performance and brings a lot of new features while fixing long-standing bugs. See our blog post for the official announcement.
🚨 Breaking Changes
loupe.inspectwith pretty-format - by @hi-ogawa, Claude Opus 5 (1M context) and OpenAI Codex in #9609 (3f802)test.for/eachtitle$variable (take 2) - by @hi-ogawa in #10170 (04d37)attachmentsDirfrom.vitest-attachements/to.vitest/attachments/- by @MdSadiqMd in #10186 (1ba73)sequentialtest/suite options in favor ofconcurrent- by @hi-ogawa and OpenAI Codex in #10198 (9229f)expectpackage - by @sheremet-va in #10221 (ad162)expect.pollwhen function didn't resolve in time - by @hi-ogawa and OpenAI Codex in #10233 (4df04)toHaveTextContentis strict, addtoMatchTextContentas alternative - by @sheremet-va in #10473 (18f30)@vitest/runnerpackage, do not publish it anymore - by @sheremet-va in #10511 (6d6e4)concurrencyId/workerIdon TestModule's diagnostics, make id 1-based - by @sheremet-va in #10516 (bdd98)screenshotDirectoryconfig tobrowser.expect.toMatchScreenshot- by @macarie in #10592 (a60de)@sinonjs/fake-timersand support mockingTemporal- by @hi-ogawa, Hiroshi Ogawa and OpenCode (gpt-5.6-sol) in #10654 (f8b15)>as separator in-t, calculateonlyonce - by @sheremet-va in #10686 (a0b20)locators.exactby default - by @sheremet-va in #10430 (e2032)sessionIdfor orchestrator html request - by @hi-ogawa, Hiroshi Ogawa and OpenAI Codex in #10522 (79b7d)attachmentsDir- by @macarie in #10917 (3b5bb)include/excludeglobs too eager - by @AriPerkkio in #9818 (edacb)thresholds.perFileto accept an object - by @vladlenskiy and @AriPerkkio in #10190 (13b78)toThrow("")behavior by reverting #6710 - by @hi-ogawa in #9643 and #6710 (6c3e4)blobreporter and--merge-reportsdefault to.vitest/blob/- by @AriPerkkio in #10232 (d22b0).vitestby default - by @hi-ogawa, Hiroshi Ogawa, OpenCode (gpt-5.6-sol) and @AriPerkkio in #10621 (58577).vitest- by @hi-ogawa and Hiroshi Ogawa in #10620 (29c36)🚀 Features
createReportand.vitestreport directory convention - by @AriPerkkio in #9993 [(72a6d)](https://redirect.gConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.